系列文章目录
文章目录
- 系列文章目录
 - 前言
 - 一、是什么
 - 总结
 
前言
物理当中也有一个反射:光的反射、声音的反射,镜子的反射
我们这里的反射是什么呢?
一、是什么
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
                










