java反射,简单demo

直接上码

//获取方法、属性、构造函数时加 Declared 表示获取本类全部的,不分修饰符;不加 Declared 表示获取从父类继承的和本类公共的
//获取 First 类的无参构造函数
Constructor c = First.class.getDeclaredConstructor();
//跳过安全检查
c.setAccessible(true);
//获取 First 对象
First first = (First) c.newInstance();
//获取 First 类对象
Class clazz = First.class;
//获取本类中所有的方法
for (Method method : clazz.getDeclaredMethods()) {
    //输出方法名
    System.out.println(method.getName());
    //跳过安全检查
    method.setAccessible(true);
    //执行该方法,需要传入当前类的对象
    method.invoke(first);
}
for (Field field : clazz.getDeclaredFields()) {
    System.out.println(field.getName());
    //跳过安全检查
    field.setAccessible(true);
    //获取该变量的值,需要传入当前类的对象
    System.out.println(field.get(first));
    //修改该变量的值,需要传入当前类的对象
    field.set(first, 12456);
    //获取该变量的值,需要传入当前类的对象
    System.out.println(field.get(first));
}

 First.java

public class First {
    private First() {
    }

    private int a = 2;

    private void test() {
        System.out.println("hello 你是怎么找到我的?");
    }
}

猜你喜欢

转载自www.cnblogs.com/chbyiming-bky/p/9837997.html