专栏首页BAT的乌托邦【小家java】java10新特性(简述十大新特性) 小步迭代

【小家java】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<String>();
        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);
    }

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

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

        list = new ArrayList<Integer>(); //编译报错
    }

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

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

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

方法参数 全局变量

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

构造函数参数 方法返回类型 字段 捕获表达式(或任何其他类型的变量声明)

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

JDK 10中有2个JEP专门用于改进当前的垃圾收集元素。 Java 10的第二个JEP是针对G1的并行完全GC(JEP 307),其重点在于通过完全GC并行来改善G1最坏情况的等待时间。G1是Java 9中的默认GC,并且此JEP的目标是使G1平行。

3、垃圾回收器接口

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

4、线程-局部变量管控

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

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

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

6、新增API:ByteArrayOutputStream

String toString(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、其它特性

线程本地握手(JEP 312)
其他Unicode语言 - 标记扩展(JEP 314)
基于Java的实验性JIT编译器
根证书颁发认证(CA)
删除工具javah(JEP 313)

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

最后

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

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 【小家java】Java中集合List、Set、Map删除元素的方法大总结(避免ConcurrentModificationException异常)

    java中的集合框架是我们日常使用得最多的数据结构,而List作为Collection里最重要的一员,使用就更加的频繁了。因此我们平时使用中少不了对List的增...

    YourBatman
  • 【小家java】聊聊Java中的java.util.Arrays类和java.util.Collections工具类

    有很多开发了很多年的人,只使用过它的asList方法去快速构建一个List,但其实它是非常强大的,可以很大程度上简化我们操作数组的方式。

    YourBatman
  • 【小家java】java8新特性之---Stream API 详解 (Map-reduce、Collectors收集器、并行流、groupby多字段分组)

    Stream 作为 Java 8 的一大亮点,它与 java.io 包里的 InputStream 和 OutputStream 是完全不同的概念。

    YourBatman
  • 面经手册 · 第10篇《扫盲java.util.Collections工具包,学习排序、二分、洗牌、旋转算法》

    好的算法搭配上合适的数据结构,可以让代码功能大大的提升效率。当然,算法学习不只是刷题,还需要落地与应用,否则到了写代码的时候,还是会for循环+ifelse。

    小傅哥
  • python 嵌套list的一些小结

    nested_list方法采用递归的方式,如果item是list类型,继续递归调用自身。如果不是,将item加入结果列表中即可。 flatten_list方...

    py3study
  • java判断list为空

    if(null == list || list.size() ==0 ){ }

    似水的流年
  • python查看所有串口(自学笔记)

    py3study
  • java判断list为空

    list.isEmpty()和list.size()==0 没有区别 isEmpty()判断有没有元素 而size()返回有几个元素 如果判断一个集合有无元素 ...

    似水的流年
  • java判断list为空

    if(null == list || list.size() ==0 ){ } list.isEmpty()和list.size()==0 没有区别...

    似水的流年
  • Todo List: Vue待办事项任务管理 – 第一章

    如果您所在公司有用过类似的todo list产品,那应该对其不是很陌生。todo list(待办事项列表),非常有名的todo list产品有Teambitio...

    Javanx

扫码关注云+社区

领取腾讯云代金券