java反射

一、创建类

import lombok.Data;

@Data
public class TestReflex{

    private String name;

    private int count;

    public int getResult(int num){
        return count=count+num;
    }

    protected  String setName(String name){
        return name;
    }
}

二、对类进行操作

public static void main(String[] args) throws ClassNotFoundException,
        IllegalAccessException, InstantiationException, NoSuchMethodException, InvocationTargetException {
		//
    Class<?> cls = Class.forName("xxx.xxx.xxx.TestReflex");
    Object obj = cls.newInstance();
     //调用非私有的方法     
    Method setFunc=cls.getMethod("getResult",int.class);
    Object o=setFunc.invoke(obj,1);
    System.out.println(o);
    //获取指定的非公有类型的方法
    setFunc=cls.getDeclaredMethod("setName",String.class);
    //可以对一个实体类的访问级别进行重新的设定
    setFunc.setAccessible(true);
    o=setFunc.invoke(obj,"张三");
    System.out.println(o);
    //只能获取非私有属性
    Field[] fields=cls.getFields();
    for(Field field:fields){
        System.out.println(field.getType()+"--"+field.getName());
    }
    //可以获取私有的属性  获取类中所有的属性(包括私有和仅有属性)
    Field[] fields1=cls.getDeclaredFields();
    for(Field field:fields1){
        System.out.println(field.getType()+"--"+field.getName());
    }
    //getMethods() : 获取所有的非私有方法对象数组  获取方法
    Method[] methods=cls.getMethods();
    for(Method method:methods){
        System.out.println(method.getName());
    }
}

三、反射的优点及缺点

1.反射的优点

  • 灵活、自由度高:不受类的访问权限限制,想对类做啥就做啥

2.反射的缺点

  • (1)使用反射的性能较低
  • (2)使用反射相对来说不安全
  • (3)破坏了类的封装性,可以通过反射获取这个类的私有方法和属性
发表评论
留言与评论(共有 0 条评论) “”
   
验证码:

相关文章

推荐文章