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 你是怎么找到我的?"); } }