Java中的反射
原理:
JVM运行时 将 java源码文件 编译成 字节码class文件 ,当class文件被加载到内存后,对应一个Class对象
如代码块所示:
java源码(类){ class字节码(类){ Class对象{
成员变量 编译成 成员变量 生成对应 成员变量
构造方法 ---------> 构造方法 ---------> 构造方法
成员方法 成员方法 成员方法
} } }
-
程序运行后,内存中没有class文件,只有Class对象。
-
反射就是通过
Class对象
,在程序运行的时候,动态的对对象进行操作。如何获得Class对象进行操作?:
3种方式
:-
通过
类名
的方式格式: 类名.class Class userClass = User.class;
-
通过
对象名
的方式格式: obj.getclass(); User user = new User(); Class userClass=user.getClass();
-
通过
全限定类名
的方式Class.forName("包.类") Class userClass=Class.forName("com.zxf.User")
-
Class对象提供方法
方法名 描述 getConstructor(Class…) 获得指定形式参数的构造器 newInstance() 通过无参构造创建一个实例对象 getMethod(String name,Class…) 获得指定名称,指定形式参数列表的普通方法。name: -
Constructor 对象方法
方法名 描述 newInstance(Object…) 通过实际参数创建一个对象实例,相当于new -
Method 对象方法
方法名 描述 Object invoke(Obj,Object…) 使用实际参数列表,执行指定对象的普通方法. obj:指定对象 Object…:指定参数列表
-