Java反射学习记录

Java反射就是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意方法和属性;并且能改变它的属性。

1、得到Class的三种方式 (获取Class对象)

  • 1、对象调用getClass()方法
  • 2、类名 .class ,说明任何类都有一个静态成员变量class
  • 3、Class类的forName 静态方法获得
    当 new出一个新对象时,jvm会加载这个类的class字节码文件,此时 jvm 会去本地磁盘找 类.class,将它读入内存,同时产生一个该类的 class对象,一个类有且仅会有一个class对象

2、通过反射获取构造器方法并调用建立实例对象

//获取到Class对象后
Class对象.getConstructor()  //获取单个公有构造器 有多个时,传入参数类型找特定的构造器
         .getConstructors() 
         .getDeclaredConstructor(int.class) //获取单个构造器方法,该方法可以私有、受保护
         .getDeclaredConstructors()

        Constructor constructor = Class对象.getConstructor() 
        constructor.setAccessible(true);//私有情况下暴力访问(忽略掉访问修饰符) private修饰的属性方法都要解除限制
        Object obj = constructor.newInstance(); //调用构造方法

3、获取成员变量且调用

//利用反射得到class对象同时实例化对象obj
Class对象.getField()  
         .getFields() //获取所有属性
         .getDeclaredField(String fieldName) //获取特定字段的属性
         .getDeclaredFields()
//调用         
//Field.set(Object obj,Object value) 设置字段所在对象 设置字段的值
Field NameField= Class对象.getDeclaredField(String fieldName);
//NameField.setAccessible(true);//暴力反射,解除私有限定
NameField.set(实例化对象obj,fieldValue);

4、获取成员方法且调用(和操作成员变量类似)

//利用反射得到class对象同时实例化对象obj

//同上一样,可以传入方法名,参数类型找指定方法
Class对象.getMethod(String MethodName,int.class,String.Class)  
         .getMethods()
         .getDeclaredMethod()
         .getDeclaredMethods()
//调用
Method.invoke(Object obj,Object... args)//如果需要也要解除私有限制
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值