系列文章目录
前言
物理当中也有一个反射:光的反射、声音的反射,镜子的反射
我们这里的反射是什么呢?
一、是什么
1、是什么
我们这里的反射也跟物理中的反射类似,就是反过来,如下:本来应该是
声明类–>创建对象
现在反过来:
获取Class对象 --创建对象:获取类的详细信息
Class对象比喻为镜子中的那个影像
2、反射的作用
- 1、在运行时能够获取任意类型的详细信息(注意是运行时不是编译时,运行时,区别与,编译时)
(1)获取这个类的Class对象
这里自动设置一下版本号(如果不设置版本号,后面你改了这个类,就会报版本不一致的问题)
然后就是 属性–构造器–getset、–toString方法一套操作
然后进行导出,这样来得到数据的类型
现在项目中没有这个了
现在就去获取这个类型,,在编译期间去获取这个类型
【这个地方要补充………!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!………………………………………………………………………………………】
(2)获取这个类的详细信息
没有获取到东西
解决办法
一切皆对象:
(1)所有类型在内存中都是Class对象
(2)所有的属性都是Field对象
private int age;
属性类型:Field类型
类的概念:一类具有相同特性的事物的抽象描述。
所有的属性,都有相同特征:
都是有修饰符、数据类型、名称
都有相同的行为操作:get获取值/set设置值
所以把属性抽象为Field类,那么一个属性被加载到内存后,是用一个Field对象表示的。
(3)所有的构造器都是Constructor的对象
所有的构造器都有:
修饰符,名称,形参列表
都能 new 对象
所以把构造器抽象为Constructor类,那么一个构造器被加载到内存后,是用一个Constructor对象表示的。
(4)所有的方法都是Method对象
所有的方法都有:
修饰符、返回值类型、方法名、形参列表、抛出的异常列表
都能 被调用invoke
-
2、在运行时能够创建任意引用数据类型的对象
-
3、在运行时可以为任意对象的任意属性赋值,或者获取任意对象的任意属性的值
-
4、在运行时可以调用任意对象的任意方法
-
5、在运行时读取某个注解信息
-
6、在运行时读取某个类的泛型实参
-
动态的xx
-
静态的xx
-
- Java语言是静态语言。
-
如果没有反射,Java必须在编译期间确定所有类型。Student stu = new Student();
-
为了Java也支持动态型,在运行期间,确定某个类型的功能,才引入了反射机制。准动态语言。
-
只是延迟了确定对象的类型而已。
-
Javascript,pythod是动态语言。
-
静态语言:效率高,安全
-
动态语言:灵活,不安全,边解释边执行,效率低
总结
1、反射的作用
- 1、在运行时能够获取任意类型的详细信息(注意是运行时不是编译时,运行时,区别与,编译时)
- 2、在运行时能够创建任意引用数据类型的对象
- 3、在运行时可以为任意对象的任意属性赋值,或者获取任意对象的任意属性的值
- 4、在运行时可以调用任意对象的任意方法
- 5、在运行时读取某个注解信息
- 6、在运行时读取某个类的泛型实参
2、 - 一切皆对象:
- (1)所有类型在内存中都是Class对象
- (2)所有的属性都是Field对象
- private int age;
- 属性类型:Field类型
- 类的概念:一类具有相同特性的事物的抽象描述。
所有的属性,都有相同特征:
都是有修饰符、数据类型、名称
都有相同的行为操作:get获取值/set设置值
所以把属性抽象为Field类,那么一个属性被加载到内存后,是用一个Field对象表示的。 - (3)所有的构造器都是Constructor的对象
- 所有的构造器都有:
-
修饰符,名称,形参列表
-
都能 new 对象
- 所以把构造器抽象为Constructor类,那么一个构造器被加载到内存后,是用一个Constructor对象表示的。
- (4)所有的方法都是Method对象
- 所有的方法都有:
-
修饰符、返回值类型、方法名、形参列表、抛出的异常列表
-
都能 被调用invoke