java基础-反射

定义

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

用途

在日常的第三方应用开发过程中,
经常会遇到某个类的某个成员变量、方法或是属性是【私有的】或是【只对系统应用开放】,
这时候就可以利用Java的反射机制通过反射来获取所需的 私有成员或是方法。

 

第一步:获取字节码对象

Class<?> clazz = Class.forName("com.june.Test");

第二步:获取成员 注解/构造方法/字段/方法

Annotation/Constructor<T>/Filed/Method  
    annotation/constructor/filed/method 
        = clazz.getXxx()/clazz.getDeclaredXxx()(成员为私有的时候);

1-获取构造函数,并创建实例:

        无参: clazz.getConstructor().newInstance();  或者  clazz.newInstance();

        有参: class.getConstructor(String.class,Integer.class).newInstance("june",26);

2-获取字段,并set字段的值或get字段的值:

        Object test = clazz.newInstance();

        Filed field = clazz.getField("name");

        filed.set(test,"june");//设置字段name的值

        Object name = filed.get(test);//获取字段name的值

3-获取方法,并执行方法

        获取有参,无返回的方法:

      Object test = clazz.newInstance();//获得实例

      Method m = clazz.getMethod("testMethod",Integer.class);

      m.invoke(test,1234);//对该实例,执行方法

        获取有参,有返回的方法;获取无参无返回方法等。。。

第三步(私有的方法,暴力反射):让jvm取消访问控制

      clazz.setAccessible(true);

 

Java高级特性——反射

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值