13、反射、类加载:
反射是java的灵魂,类加载为反射服务,所有的数据都有Class对象。
反射:运行时探究和使用编译是未知的类。
1、获取Class对象:
(1)根据类名获取Class对象;
Class c=类名.Class;
(2)根据实例对象获取这个类的Class对象;
Class c=对象名.getClass();这个方法不适合基本数据类型
(3)根据类型的字符串名称获取该类型的Class对象。
Class c=Class.forName("类全名");唯有这种方式能实现编译时未知运行时探究。
2、探究Class对象存放的类的信息:
(0)类的声明
(1)属性:Field;
(2)构造:Constructor;
(3)行为:Method。
其中构造和行为只有声明部分。
3、使用探究的信息进行操作:
(1)利用反射技术产生实例对象;构造:Instance(产生对象)
(2)利用反射技术实例对象的属性;属性:get/set(赋值取值)
(3)利用反射技术实例对象方法的调用。行为:invoke(调用方法)
类的class文件读入内存后,就会创建一个java.lang.Class(类模板对象)。也就是说,当java程序中使用任何类时,系统都会为之创建一个java.lang.Class对象,一旦某个对象被载入JVM中,同一个类就不会被再次载入。