Java让我们在运行时识别对象和类的信息,主要有2种方式:
一种是传统的RTTI,它假定我们在编译时已经知道了所有的类型信息;
另一种是反射机制,它允许我们在运行时发现和使用类的信息。
https://www.cnblogs.com/rocomp/p/4781987.html
理解反射对学习Java框架有很大的帮助,如Spring框架的核心就是使用Java反射实现的,而且对做一些Java底层的操作会很有帮助。
1、编译时加载类是静态加载类,
new 创建对象是静态加载类,在编译时刻就需要加载所有可用使用到的类,如果有一个用不了,那么整个文件都无法通过编译
2、运行时加载类是动态加载类
Class c = Class.forName("类的全名"),不仅表示了类的类型,还表示了动态加载类,编译不会报错,在运行时才会加载,使用接口标准能更方便动态加载类的实现。功能性的类尽量使用动态加载,而不用静态加载。
很多软件比如QQ,360的在线升级,并不需要重新编译文件,只是动态的加载新的东西
想得到一个类的信息,首先就要获取该类的类类型。
反射就是用来:不想静态加载类(在编译时加载的类),而是:直接在运行时期使用类中属性或方法
泛型:编译之后集合的泛型是去泛型化的。泛型只是用来:保证编译时期集合中的元素类型一致; 即:防止错误类型元素的输入;