反射与泛型
1.反射
在常规便携java代码的过程中,都是通过new对象,然后在访问该对象的方法和属性。当我们想在==运行期才能指定具体对象的类型==时,普通的编码方式将无法实现需求,这时便需要用到反射。反射在框架中应用广泛,因为框架面对的是通用的应用场景,无法事先预知具体的对象类型。
普通的运行时期对象类型,在类加载器,就会打开和检查class文件。执行类的加载,验证,准备,解析,初始化五个步骤,将class对象存储到堆栈,方便后期直接使用。反射的方式在类加载器没有做任何事情,而是将这一过程延迟到了运行期。
2.泛型
早期Java是使用Object来代表任意类型的,但是向下转型有强转的问题 ,这样程序并不安全。
针对List、Set、Map等集合类型,它们对存储的元素类型是没有任何限制的。假如向List中存储Dog类型的对象,但是有人把Cat对象也存储到 这个List中了,那么在编译上是没有任何语法错误的。
所有使用该泛型参数的地方都被统一化,保证类型一致。如果未指定具体类型,默认是Object类型。集合体系中的所有类都增加了泛型,泛型也主要用在集合。