反射技术小本本

目录

 

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);

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值