Java——反射

mac2024-03-15  30

package reflect; public class Person { private String name; private int age; public String getName() { return name; } public void setName(String name) { this.name = name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } Person() { } private void Person(String name, int age) { this.name = name; this.age = age; } private String getInfo(String name, int age) { return name+":"+String.valueOf(age)+"岁"; } } package reflect; import java.lang.reflect.Constructor; import java.lang.reflect.Field; import java.lang.reflect.Method; //https://www.cnblogs.com/bbbing/p/11011424.html //https://blog.csdn.net/ljphhj/article/details/12858767 //https://www.jianshu.com/p/9be58ee20dee //https://www.cnblogs.com/jiangyi-uestc/p/5689771.html public class App { public static void main(String[] args) throws Exception { //获取类的所有属性 reflect_callField(); //赋值类的属性 reflect_setField(); //获取类的构造方法 reflect_callConstructor(); //获取类的方法 reflect_callMethod(); //调用类的私有方法 reflect_setMethod() ; } /*** * 获取类的所有属性,包括私有属性 * */ public static void reflect_callField() throws Exception { System.out.println("获取类的属性..."); Class<?> clz=Class.forName("reflect.Person"); Field[] fields = clz.getDeclaredFields(); for (Field field : fields) { System.out.println(field.getName()); } } /*** * 设置类的属性值 * */ public static void reflect_setField() throws Exception { System.out.println("设置类的属性值..."); Class<?> clz=Class.forName("reflect.Person"); Object obj = clz.newInstance(); Field field = clz.getDeclaredField("age"); field.setAccessible(true); field.set(obj, 16); System.out.println(field.getName()+","+field.get(obj)); } /*** * 获取类的构造器 * */ public static void reflect_callConstructor() throws Exception { System.out.println("获取类的构造器..."); Class<?> clz=Class.forName("reflect.Person"); Constructor[] constructors = clz.getDeclaredConstructors(); for (Constructor constructor : constructors) { System.out.println(constructor); } } /*** * 获取类的方法 * */ public static void reflect_callMethod() throws Exception { System.out.println("获取类的方法..."); Class<?> clz=Class.forName("reflect.Person"); Method[] methods = clz.getDeclaredMethods(); for(Method method:methods) { System.out.println(method); } } /*** * 调用类的私有方法 * */ public static void reflect_setMethod() throws Exception { System.out.println("调用类的方法..."); Class<?> clz=Class.forName("reflect.Person"); Object object = clz.newInstance(); // Constructor constructor=clz.getDeclaredConstructor(String.class, int.class); // Object object=constructor.newInstance("Mike",20); Method method=clz.getDeclaredMethod("getInfo", String.class,int.class); method.setAccessible(true); Object obj = method.invoke(object,new Object[]{"小明",30}); System.out.println(obj); } } 打印结果 获取类的属性... name age 设置类的属性值... age,16 获取类的构造器... reflect.Person() 获取类的方法... public java.lang.String reflect.Person.getName() public void reflect.Person.setName(java.lang.String) private java.lang.String reflect.Person.getInfo(java.lang.String,int) public int reflect.Person.getAge() public void reflect.Person.setAge(int) private void reflect.Person.Person(java.lang.String,int) 调用类的方法... 小明:30岁

 

 

最新回复(0)