在运行状态中,对于任意一个类都能知道这个类的所有属性和方法,对于任意一个对象,都能调用它的任意一个属性和方法,种种动态获取的信息以及动态调用对象的方法的功能称为java反射机制
反射获取类具有三种方式:
以获取people类型为例
- Classc1=Class.forName(“People”);
- Class c=People.class;
- People p=new People();
Class c =p.getClass();
反射机制的作用:
1.反编译 .class---->.java
2.通过反射机制访问java对象的属性方法,构造方法等
获取私有构造方法:getDeclaredConstructor(类型.class)
获取公有的构造方法:getConstructor(类型.class)
获取一个方法getMethod(方法名,参数)
…
Class c=Class.forName("mingrisoft.RBNode");
System.out.println("--获取所有的公用的构造方法---");
Constructor[] con=c.getConstructors();
for (Constructor constructor:con){
System.out.println(constructor);
}
如果要通过私有构造方法获取对象实例,要打开权限
setAccessible(true) 默认是false
Class c=People.class; Constructor con=c.getDeclareConstructor(); con.setAccessible(true); Object o=co.newInstance("lisi"); Method m=c.getMethod("cat"); method.invoke(o);
invoke方法的作用是用来执行实例中的方法,相当于".方法名"