反射技术小本本

目录

 

1.获得反射入口(或称反射对象)(第一步)

2.通过反射获得构造器、对象、方法、属性,进而操作

3.使用/访问private修饰的属性/方法时,使用setAccessible(true)越过权限检查

4.对象属性赋值

5.动态引入文本内容

6.赋值工具类(反射技术实现)


1.获得反射入口(或称反射对象)(第一步)

    三个方法,如下:

    //1.Class.forName(全类名)   

    Class clazz1 = Class.forName("reflect.Person");

    //2.Xxx.class

    Class clazz2 = Person.class;

    //3.对象.getClass();

    Person per = new Person();

    Class clazz3 = per.getClass();

---------------------------------

constructor/instance/method/field 都有getClass()方法

2.通过反射获得构造器、对象、方法、属性,进而操作

 

clazz.getxxx():  获取clazz对象的public修饰符修饰的各种信息(接口、构造器、方法、属性等)

clazz.getDeclaredxxx:  获取clazz对象的所有修饰符修饰的各种信息(含private)

3.使用/访问private修饰的属性/方法时,使用setAccessible(true)越过权限检查

4.对象属性赋值

instance.setxxx();

method.invoke();

field.set();//反射赋值,不经过setter方法

5.动态引入文本内容

Properties prop = new Properties();

prop.load( new FileReader("src/Class.txt"));//FileReader

String className = prop.getProperty("classname");

String methodname = prop.getProperty("methodname");

Class clazz = Class.forName(className);

6.赋值工具类(反射技术实现)

public static void setProperty(Object obj,String propertyName,Object value) throws NoSuchMethodException, SecurityException, IllegalAccessException, IllegalArgumentException, InvocationTargetException, NoSuchFieldException {

        Class clazz = obj.getClass();

        Field field = clazz.getDeclaredField(propertyName);

        field.setAccessible(true);//访问private修饰符限定的资源时,需要setAccessible(true)

        field.set(obj, value);

}

你可能感兴趣的:(反射技术)