记录学习Java EE 反射之暴力反射

1 篇文章 0 订阅
1 篇文章 0 订阅

Java反射技术之暴力反射

java反射技术应用广泛,它能够配置:类的全限定名、方法和参数,完成对象的初始化,甚至是反射某些芳芳。这样就可以大大增强Java的可配置性,Spriong Ioc的基本原理也是如此(当然 Spring Ioc 的代码要复杂的多)。
如果构造方法、普通方法、字段 被private(私有)修饰,默认情况下,在该类的外部是不允许被访问的,如果使用暴力反射,即使被private修饰也可以进行操作。
直接进入正题:如何使用反射技术,来操作私有方法


package reflect;

/**
 * @Type Reflect.java
 * @Desc 
 * @author hanchenyi
 * @date Apr 8, 2019 11:11:35 AM
 * @version 
 */
public class Reflect {
    private void sayHello(String name) {
        System.out.println("你好:"+name);
    }
}

测试类

public class Demo {
    @SuppressWarnings("deprecation")
    public static void main(String[] args) throws Exception {
        Class<?> clazz = Class.forName("reflect.Reflect");
        // 获取私有方法  sayHello ,注意是否有参数
        Method method = clazz.getDeclaredMethod("sayHello",String.class);
        System.out.println(method);
        Reflect reflect = (Reflect) clazz.newInstance();
        // 在私有方法运行之前 先取消Java的权限控制检查
        method.setAccessible(true);
        method.invoke(reflect,"克瑞斯");
    }
}

打印结果

private void reflect.Reflect.sayHello(java.lang.String)
你好:克瑞斯

运行私有方法的时候,别忘了加上参数
例如直接这样
method.invoke(reflect);
就会出现
java.lang.IllegalArgumentException 非法参数异常

TheGreatBillGates

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值