java反射机制

java反射机制:
java反射机制是在运行状态中,对于任意一个类(class 文件),都能够知道这个类的所有属性和方法
对于任意一个对象,都能够调用他的任意一个方法和属性
这种动态获取的信息以及动态调用对象的方法的功能称为java语言的反射机制


动态获取类中的信息,就是java反射。可以理解为对类的解剖
用于描述字节码文件的类 class  Class{ },这个类中提供了获取字节码文件中内容的方法
要想对字节码文件进行解剖,必须要有字节码文件
如何获取字节码文件对象,有三种方式:
1、Object类中的getClass( )方法的。
       想要用这种方式,必须要明确具体的类,并创建对象,麻烦
       例如:Person  p = new Person( );  Class clazz = p.getClass;
 2、任何数据类型都具备一个静态的属性。class来获取其对应的class对象
        相对简单,但是还是要明确到类中的静态成员,还是不够扩展
Class clazz =Person.class();
 3(重点)、只要通过给定的类的字符串名称就可以获取该类,更为扩展
                  可以用Class类中的方法完成,该方法就是forName
 这种方式只要有名称就可以,更为方便,扩展性更强
 String  className =“cn.itcast.bean.Person”;注意:要有完整的包名
 Class clazz = Class.forName(className);
  (1)、获取构造函数
  newInstance();创建此class对象所表示的类的一个新实例
  一般被反射的类都带有空参的构造函数,没有空参构造函数时要怎么做呢?
  getConstructors(可变参数);获得类中的公共构造函数,只能是公共的
  例如:Constructor constructor = clazz.getConstructors(String.class,int.class);
        //通过该构造器的newInstance方法进行对象的初始化
        Object obj = constructor.newInstance("小明",38);
  getDeclaredConstructors获取类中所有的构造函数,包括私有构造函数,但只是本类中的
  (2)、获取字段
  Field field = clazz.getDeclaredField("age");
  //对私有字段的访问取消权限检查.暴力访问
  field.setAccessible(true);
  Object obj = clazz.newInstance();
  field.set(obj,89);
  Object o = field.get(obj);
  (3)、获取方法
  Methods [] methods = clazz.getMethods();//获取所有的公共方法
  methods =  clazz.DeclaredgetMethods();
  for(Method method:method){
    System.out.println(method);
  }


  Method method = clazz.getMethod("show",null);//获取一个空参数的函数名为show的方法,第二个参   数是可变参数
  //Object obj = clazz.newInstance();
  Constructor constructor = clazz.getConstructor(String.class,int.class);
  Object obj = constructor.newInstance("小明",38);
  mehtod.invoke(obj,null);
  







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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值