JDK5新特性
自动装箱与拆箱 -
枚举
静态导入 -,为了减少字符的输入量
可变参数(Varargs)
内省(introspector)-,操作bean
泛型(Generic)
For-Each循环
JDK6新特性
Desktop类和SystemTray类
使用JAXB2来实现对象与XML之间的映射
理解STAX
使用Compiler API
轻量级 Http Server API
插入式注解处理 API
使用Console开发控制台程序
对脚本语言的支持
Common Annotations
Java GUI界面的显示
嵌入式数据库Derby
Web服务元数据
Jtable的排序和过滤
更简单更强大的JAX-WS
JDK7新特性
switch中可以使用字符串了
泛型实例化类型自动推断
自定义自动关闭类
新增一些读取环境信息的工具方法
Boolean类型反转,空指针安全,参与位运算
两个char之间的equals
安全的加减乘除|sd
对Java集合( Collections)的增强支持
数值可加下划线
支持二进制数字
在try/catch异常扑捉中,一个catch可以写多个异常类型用|隔开
可以不必要写finally语句来关闭资源,只要你在try()的括号内部定义要使用的资源
JDK8新特性
接口的默认方法
Lambda表达式
函数式接口
方法与构造函数引用
扩展了集合类
新的Date API
Annotation多重注解
streams(流)
parallel streams(并行流)
Map数据结构改进
JDK9新特性
Jigsaw模块化项目
简化进程API
轻量级JSON API
钱和货币的API
改善锁竞争机制
代码分段缓存
智能java编译
http2.0客户端
kulla计划
JDK10新特性
局部变量的类型推断
GC改进和内存管理
线程本地握手
备用内存设备上的堆分配
其他Unicode语言 - 标记扩展
基于Java的实验性JIT编译器
开源根证书
根证书颁发认证(CA)
将JDK生态整合单个存储库
删除工具javah
面试题
内省机制和反射机制什么区别
内省操作只针对JavaBean,只有符合JavaBean规则的类的成员才可以采用内省API进行操作。。。。而反射则不同,一个类的所有成员都可以进行反射操作。
内省是Java语言对Bean类属性、事件的一种缺省处理方法。
内省和反射的操作也有很大不同,内省是先得到属性描述器PropertyDecriptor后再进行各种操作,反射则是先得到类的字节码Class后再进行各种操作的。
反射就是让你可以通过名称来得到对象(类,属性,方法)的技术。例如我们可以通过类名来生成一个类的实例;知道了方法名,就可以调用这个方法;知道了属性名就可以访问这个属性的值。
自动装箱与拆箱
举例
Integer i = 10; //装箱
int n = i; //拆箱
本质
基本数据类型与包装器类型之间的转换
目的
简化开发
应用
参数有可能是基本数据类型,有可能是Object包装类型的情形下
源码解析
调用Integer的valueOf(int)方法和intValue()方法
面试Integer
对象比较问题:在[-128,127]之间存在Integer对象的缓存,Double不存在缓存。Boolean一定相同,有静态常量。
注意,Integer、Short、Byte、Character、Long这几个类的valueOf方法的实现是类似的。 Double、Float的valueOf方法的实现是类似的。
如果其中有一个操作数是表达式(即包含算术运算)则比较的是数值(即会触发自动拆箱的过程)
Integer i = new Integer(xxx)和Integer i =xxx;这两种方式的区别
-
第一种方式不会触发自动装箱的过程;而第二种方式会触发;
-
在执行效率和资源占用上的区别。第二种方式的执行效率和资源占用在一般性情况下要优于第一种情况(注意这并不是绝对的)。
开发注意的问题
注意包装类型为null的情况
可变参数
目的
适用于参数个数不确定,类型确定的情况,java把可变参数当做数组处理。
本质
数组
特点
- 只能出现在参数列表的最后
- 只能有一个
- 重载时,优先匹配固定参数
注意事项
- int[] 无法转型为 Object[]
- 尽量不要重写,父子类无法转型
- null重载无法确定匹配的方法
for each
目的
简化开发
本质
迭代器模式和普通for循环
缺点
- 无法使用索引
- 迭代时无法改变集合