一、局部变量类型推断
Java是一种强类型,需要引入大量的样板代码。给定好变量名,很清楚发生了什么,明显类型声明是大可不必的
JDK10新增的最大一个特性就是局部变量类型推断了,这个新功能将为Java增加一些语法糖 - 简化它并改善开发者体验。新的语法将减少与编写Java相关的冗长度,同时保持对静态类型安全性的承诺。
JDK10 可以使用var作为局部变量类型推断标识符,此符号仅适用于局部变量,增强for循环的索引,以及传统for循环的本地变量
该特性特点:
1、只针对局部变量
编译报错’var’ is not allowed here
2、var是保留类型。不是关键字,意味着我们还可用var来定义变量名或者是方法名,下面这样编译是可以通过的。
3、var不允许赋值null。
不能对初始化为null的本地变量推断类型
4、不能用var去定义我们方法的参数,虽然说方法的参数也是一个局部变量,但是方法的参数只有变量没有值,那么如果没有值的话,jdk是无法推断当前的变量应该是什么类型的。
5、局部变量类型的推断,要求你的变量的后面必须要有个确切的值
二、垃圾收集器的优化
Stop The World
收集器不断地优化就是为了让代码暂停的时间不断地缩短
老年代:parallel OBI收集器
JDK9:新生代:parNew收集器。
jdk10全面改为G1(GarbageFrist)全收集器,G1收集器是一个全收集器,jdk5时就出现G1,只不过在jdk10的时候技术变得成熟,变成了默认的收集器
三、新增73个新功能扩展API类库
1、在java.util.List、Java.util.Set、Java.util.Map新增加了一个静态方法copyOf
这些方法按照其迭代顺序返回一个不可修改的列表、集合或映射包含了给定的元素的集合。如果修改会报错。
2、Java.io.ByteArrayOutputStream.toString(Charset)
重载 tostring() 方法,通过使用指定的字符集编码字节,将缓冲区的内容转换为字符串。
3、Java.io.PrintStream、java.io.PrintWriter
这两个类都有三个新的构造方法,他们需要额外的参数charset
根据给定的字符编码创建字符输出流,这样减少了字符编码转换带来的错误
4、java.io.Reader:transferTo方法
从这个Reader中读取所有字符串,并按照所读取的顺序将字符串写入给指定的Writer
不再需要通过循环操作流去读,然后再通过循环去操作流去写了,非常方便
5、Java.util.Formatter、java.util.Scanner
新增三个构造方法。除了其他参数之外,都需要一个charset参数
四、线程局部管控
在不执行全局VM安全点的情况下对线程执行回调的方法。让它停止单个线程而不是全部线程。
五、Unicode 标签扩展
增强了 java.util.Locale 和相关 API 以实现关于 BCP 47 语言标签 的 Unicode 扩展。