Java 10 新特性

2021年6月11日   |   by mebius

Java10它号称有109项新特性,包含12个JEP。

需要注意的是,本次Java10并不是Oracle的官方LTS版本,所以咱们可以先了解新特性。然后坐等java11的发布再考虑在生产中使用吧。

特性列表

局部变量的类型推断var关键字

GC改进和内存管理并行全垃圾回收器G1

垃圾回收器接口

线程-局部变量管控

合并JDK多个代码仓库到一个单独的储存库中

新增API:ByteArrayOutputStream

新增API:List、Map、Set

新增API:java.util.Properties

新增API:Collectors收集器

其它特性

1、局部变量的类型推断var关键字

这个新功能将为Java增加一些语法糖-简化它并改善开发者体验。新的语法将减少与编写Java相关的冗长度,同时保持对静态类型安全性的承诺。

这可能是Java10给开发者带来的最大的一个新特性。下面主要看例子:

  public static void main(String[] args) {
        var list = new ArrayList();
        list.add("hello,world!");
        System.out.println(list);
    }

这是最平常的使用。注意赋值语句右边,最好写上泛型类型,否则会有如下情况:

public static void main(String[] args) {
        var list = new ArrayList();
        list.add("hello,world!");
        list.add(1);
        list.add(1.01);
        System.out.println(list);
    }

么都可以装,非常的不安全了。和js等语言不同的是,毕竟Java还是强类型的语言,所以下面语句是编译报错的:

public static void main(String[] args) {
        var list = new ArrayList();
        list.add("hello,world!");
        System.out.println(list);
        list = newtgcode ArrayList(tgcode); //编译报错
    }

注意:注意:注意:下面几点使用限制

局部变量初始化

for循环内部索引变量

传统的for循环声明变量

public static void main(String[] args) {
        //局部变量初始化
        var list = new ArrayList();
        //for循环内部索引变量
        for (var s : list) {
            System.out.println(s);
        }
        //传统的for循环声明变量
        for (var i = 0; i 

下面这几种情况,都是不能使用var的

方法参数

全局变量

public static var list = new ArrayList(); //编译报错
    public static List list = new ArrayList(); //正常编译通过

构造函数参数

方法返回类型

字段

捕获表达式(或任何其他类型的变量声明)

2、GC改进和内存管理并行全垃圾回收器G1

JDK10中有2个JEP专门用于改进当前的垃圾收集元素。

Java10的第二个JEP是针对G1的并行完全GC(JEP307),其重点在于通过完全GC并行来改善G1最坏情况的等待时间。G1是Java9中的默认GC,并且此JEP的目标是使G1平行。

3、垃圾回收器接口

这不是让开发者用来控制垃圾回收的接口;而是一个在JVM源代码中的允许另外的垃圾回收器快速方便的集成的接口。

4、线程-局部变量管控

这是在JVM内部相当低级别的更改,现在将允许在不运行全局虚拟机安全点的情况下实现线程回调。这将使得停止单个线程变得可能和便宜,而不是只能启用或停止所有线程。

5、合并JDK多个代码仓库到一个单独的储存库中

在JDK9中,有8个仓库:root、corba、hotspot、jaxp、jaxws、jdk、langtools和nashorn。在JDK10中这些将被合并为一个,使得跨相互依赖的变更集的存储库运行atomiccommit(原子提交)成为可能。

6、新增API:ByteArrayOutputStream

StringtoString(Charset):重载toString(),通过使用指定的字符集解码字节,将缓冲区的内容转换为字符串。

7、新增API:List、Map、Set

这3个接口都增加了一个新的静态方法,copyOf(Collection)。这些函数按照其迭代顺序返回一个不可修改的列表、映射或包含给定集合的元素的集合。

8、新增API:java.util.Properties

增加了一个新的构造函数,它接受一个int参数。这将创建一个没有默认值的空属性列表,并且指定初始大小以容纳指定的元素数量,而无需动态调整大小。还有一个新的重载的replace方法,接受三个Object参数并返回一个布尔值。只有在当前映射到指定值时,才会替换指定键的条目。

9、新增API:Collectors收集器

toUnmodifiableList():

toUnmodifiableSet():

toUnmodifiableMap(Function,Function):

toUnmodifiableMap(Function,Function,BinaryOperator):

这四个新方法都返回Collectors,将输入元素聚集到适当的不可修改的集合中。

10、其它特性

线程本地握手(JEP312)

其他Unicode语言-标记扩展(JEP314)

基于Java的实验性JIT编译器

根证书颁发认证(CA)

删除工具javah(JEP313)

从JDK中移除了javah工具,这个很简单tgcode并且很重要。

最后

JDK10的升级幅度其实主要还是以优化为主,并没有带来太多对使用者惊喜的特性。所以建议广大开发者还是研究一下2018年9月份到来Java11吧,最重要的是它是LTS版本哦,所以是可以运用在生产上的。

文章来源于互联网:Java 10 新特性

相关推荐: Java 9 新特性

Java 9 新特性 Java 9 发布于 2017 年 9 月 22 日,带来了很多新特性,其中最主要的变化是已经实现的模块化系统。接下来我们会详细介绍 Java 9 的新特性。 Java 9 新特性 模块系统:模块是一个包的容器,Java 9 最大的变化之…

Tags: ,