反射指动态获取类及类中的内容
示例代码:String className = "cn.itheima.web.servlet.MyServletImpl";
Class clazz = Class.forName(className);
MyServletImpl my = (MyServletImpl) clazz.newInstance();
如何获取类的Class对象(字节码文件)?
1,通过Object类的getClass() 方法 ,需要先创建对象 -----比较两个文件是否为同一个字节码文件
2,通过Class的静态属性 .class 获取 -----锁对象
3,通过Class的静态方法,Class.forName( )方法获取 ----读取配置文件
如何获取Class对象所对应的类的构造方法?
1,无参构造,可以直接用newInstance( )来创建对象
2,有参构造,可以用 getConstructor( )来获取构造方法,(括号里不传入参数是获取无参构造方法,传入参数是获取有参构造)再使用newInstance( )来创建对象
代码演示如下:
如何获取Class对象所对应的类或接口的定义的变量,字段?
1,如是公共变量,可以在获取Class对象后,调用getField(String ?)获取
2,如是私有变量,可以在获取Class对象后,调用getDeclaredField(Sting ?)暴力获取 声明的变量,如需改变其值,则需用,setAccessible(ture)去除私有权限
如何获取Class对象对应的类或接口中的方法?
1,公共方法,getMethod( )
2,私有方法,getDeclaredMethod( )