Java反射的知识

java反射描述:  

1.反射机制是在运行状态中,对于任意一个类(class文件),都能够知道这个类的所有属性和方法。  2.对于任意一个对象,都能够调用它的任意一个方法和属性。         这种动态获取信息和动态调用对象的方法的功能称为java的反射机制。  简单定义:可以动态类中的信息,就是反射。也就是对类的解剖。

2.java用类来体现字节码文件的描述:Class,它提供了获取类中的所有信息,反射就是依靠该类来完成的。 想要对一个类进行解剖只需要获取这个类的字节码对象即可。

  获取字节码对象的方法有:

   1.Object为右眼的getClass()方法。 这中方式必须要明确具体的类。  

  2.任何对象都具有静态属性.class来获取并创建对象。 但是还是要明确到类的静态成员。  

  3.用Class中的forName来完成。给定字符串(要包括完整包名)就可以得到该Class类,这是最好的方式。  

  第三种方式与new 一个对象的区别:new一个对象,当new完过后就去找到这个字节码文件,并加到内存,然后再 创建字节码文件对象,再创建对应的对象。  Class.forName();直接到指定包中找到字节码文件,然后加载到内存中,产生Class对象,接着newInstance()创建对应的对象。

  获取构造函数:     

  1. newInstance相当于调用了一个空的构造函数。 所以这个空的构造函数一定要存在,而且不能是私有的,最好是共公的。     

  2. 如果它的构造函数还有参数且不只一个,可以通过getDeclaredConstructors/getConstructor(Class<?>...)来获取。       例如:getConstructor(String.class,int.class);返回一个Constructor对象。以通过该Constructor对象       的newInstance来实例化,返回一个Object 对象,从而实现了其它构造函数的调用。

  获取字段:

      1. getField("age");//获取字段,传入字段的名称。该字段必须是公共的,可以是父类      

  2.getDeclaredField("age");//获取字段,只获取本类中,可以是任何类型。返回Field      

  3.Filed中可以调用.get(对象)/.getX(对象),取得该字段的值,但是如果这个字段必须要是公共的,否则无法获取。      

  4.如果想要获取非公有的字段的值,那么要看:AccessibleObject它的父类了。 可以用Field.setAccessible(true),取消权限检查。就可以通过2来获取或设置值了。

  获取方法:

     1.getMethods 获取方法,必须是公共的。   

    2.暴力访问取得非公有的方法。 getDeclaredMethod(String name,Class..params);方法名,参数的class(拿构造不需要name)   

   3.运行一个方法:method.invoke(对象,该方法的参数);

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值