-
反射reflect
1.1 Class(描述类的类)
获得类对象的三种方式1.1.1 通过字符串的类名获取
Class c = Class.forName(“com.direct.Person”);
1.1.2 通过类.class来获取
Class c = Person.class;
1.1.3 通过对象.getClass()来获取
Person p = new Person();
Class c = p.getClass();
1.2 Constructor(描述构造方法的类)
1.2.1 获得构造方法
getConstructors // 获取所有public构造方法
getConstructor(new Class[] {..}) //获取指定参数列表的可见构造方法
getDeclaredConstructor(new Class[]{…})// 获取声明的构造方法(包括私有的)
getDeclaredConstructors //获取所有构造方法(包括私有的)1.2.2 根据构造方法创建对象
cons.newInstance(new Object[]{..})
1.3 Field(描述属性的类)
1.3.1 获取属性
Field[] fs1 = c.getFields(); // 获取拥有的public的属性(包括继承来的属性)
Field[] fs2 = c.getDeclaredFields(); // 获取自己类中声明的属性(包括私有属性)
Field f1 = c.getField(“name”);
Field f2 = c.getDeclaredField(“name”);
1.3.2 访问属性
Feild f = c.getFeild(“name”);
f.set(obj,value);// 设置obj对象的name属性值为value,相当于obj.name = value;
Object value = f.get(obj); // 获取obj对象的name属性值 相当于 Object value = obj.name;f.setAccessible(true); // 设置name属性可以被访问(修改访问权限,private也可以修改)
1.4 Method(描述方法的类)
1.4.1 获取方法
c.getMethod(name, parameterTypes)
c.getMethods()
c.getDeclaredMethod(name, parameterTypes)
c.getDeclaredMethods()1.4.2 执行方法
Method m1 = c.getMethod(“eat”, new Class[]{});
// 执行对应的方法
Object r = m1.invoke(o, new Object[]{});// 执行o对象的eat方法,用r来接收返回值
m1.setAccessible(true);