java中的反射
目录能够分析信息的能力叫反射
1.获取类的方法
-
Class.forName(路径)
-
类.class
-
对象.getClass()
2.类对象常用功能
一、构造方法
-
获取指定的公共构造器
- 获取构造方法 getConstructor()可以根据构造方法参数类型的不同,传入对应的类对象,即可获得指定的构造方法
- 创建对象 newInstance()
- 如果使用无参构造方法,此操作可以简化:类对象.newInstance() 来创建
-
获取指定的所有构造器(公共+非公共)
- getDeclaredConstructor()
-
获取所有的公共构造方法
-
getConstructors
// 反射获取Class对象 Class c = Class.forName("demo0425.Person"); // 获得所有构造方法 Constructor[] constructors = c.getConstructors(); for (Constructor constructor : constructors) { System.out.println(constructor); }
-
-
获取所有的构造方法(公共+非公共)
- getDeclaredConstructors()
二、成员变量
-
获取指定公共成员变量
- getField()
- field.set(Object obj,Object value)
- field.get(Object obj)
Person o = new Person(); Class c1 = Class.forName("demo0425.Person"); System.out.println("====获取指定字段="); Field field = c1.getField("name"); field.set(o, "Jerry"); System.out.println(field.get(o));
-
获取指定所有成员变量(公共+非公共)
-
getDeclaredField()
System.out.println("====获取私有字段="); Field field2 = c1.getDeclaredField("age");// 获得私有字段 // 设置私有字段可访问 field2.setAccessible(true); field2.set(o, 25); System.out.println(field2.get(o));
-
-
获取所有公共的成员变量
-
getFields()
System.out.println("======获取所有字段,不包括私有字段="); Field[] fields = c1.getFields(); for (Field field1 : fields) { System.out.println(field1); }
-
-
获取所有成员变量(公共+非公共)
-
getDeclaredFields()
-
非公共需要使用setAccessible(true);
System.out.println("======获取所有字段,包括私有字段==========="); Field[] declaredFields = c1.getDeclaredFields(); for (Field declaredField : declaredFields) { System.out.println(declaredField); }
-
三、方法
-
获取指定公共方法
- getMethod()
- 根据方法名获取以及参数类型对应的类对象来指定获得
- 调用方法invoke(Object obj,Object… args)
-
获取所有公共方法
- getMethods()
-
获取指定方法(公共+非公共)
- getDeclaredMethod()
-
获取所有方法(公共+非公共)
- getDeclaredMethods()
注意:非公共使用时需要使用:setAccessible(true)
标签:反射,java,构造方法,System,获取,公共,println,out From: https://www.cnblogs.com/ning23/p/18195991