**
反射**
反射是java语言的一个特性,通过动态编译确定类型,绑定对象,对内部的成员进行操作,
作用
在运行时判断一个对象所属的类
在运行时获取类的对象
在运行时访问java对象的属性、方法、构造方法等
优缺点
可以实现动态创建对象和编译,灵活性强,但对性能有影响
Ioc
是一个容器,在容器里要产生的对象都在配置文件中给出定义,然后利用编程语言提供的反射机制,根据配置文件中给出的类名生成相应的对象。
枚举类型
是由一组固定的常量组合成合法的类型,用来简化代码,方便操作
应用场景
定义变量(如周天、四季)、switch、向枚举中添加新方法、覆盖枚举的方法、实现接口
枚举保证的线程安全
当一个Java类第一次被真正使用到的时候静态资源被初始化、Java类的加载和初始化都是线程安全的。
枚举是实现单例最简单的方式,是因为Java提供的关键字enum,在被虚拟机加载的过程中能保证线程安全,可避免在反序列化中由反射而导致的单例被破坏
用枚举实现单例的好处
1.枚举写法简单
2.枚举自己处理序列化
3.枚举实例创建时线程安全的
泛型
作用:将类型由原来的具体的类型参数化,泛型最大的好处时提高代码复用
Java编译器处理泛型
Code sharing:对每个泛型类只生成唯一的一份目标代码,该泛型所有的实例都映射到这份代码上,在需要的时候执行类型检查和类型转换
类型擦除
将泛型java代码转换为普通java代码
主要过程
1.将所有泛型参数用最左边界参数替换
2.移除所有类型参数
总结
1.虚拟机中没有泛型,只有普通类的普通方法,所有泛型类的类型参数在编译时都会被擦除
2.创建泛型对象时请指明类型,让编译器尽早的做参数检查
3.编译器的警告错误,一般是ClassCastException
4.静态变量是被泛型类的所有实例共享的
5.泛型的类型参数不能用在Java异常处理的catch语句中
限定通配符
类型的上界:<? extends T>,类型必须为T类型或者T子类
类型的下界:<?super T>,类型必须为T类型或T父类
非限定通配符
表示可以用任意泛型类型来代替,类型为
注:在使用泛型时,获取数据用extends,存储数据用super