java10新特性

1 局部变量的类型推断

ava开始引用像脚本语言JavaScript中的var类型(弱类型),允许你通过var定义任何类型的变量。对于开发人员来说,这是唯一和你密切相关的特性。它可以帮助你极大的简化代码。

Object objList = new ArrayList<String>();
objList.add("hello,world!");//这句代码会出现编译异常
 
var varList = new ArrayList<String>();
varList.add("hello,world!");//而这句代码会编译通过

var是一个类型引用对象,它和表达式右边的类型具有相同的属性。 即以下两句代码是对等的:

var varList = new ArrayList<String>();
ArrayList<String> varList = new ArrayList<String>();

注意赋值语句右边,最好写上泛型类型,否则会有如下情况

 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 = new ArrayList<Integer>(); //编译报错
    }

2 并行全垃圾回收器 G1

G1 是设计来作为一种低延时的垃圾回收器(但是如果它跟不上旧的堆碎片产生的提升速率的话,将仍然采用完整压缩集合)。在 JDK9 之前,默认的收集器是并行,吞吐,收集器。为了减少在使用默认的收集器的应用性能配置文件的差异,G1 现在有一个并行完整收集机制。

3 垃圾回收器接口

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

4 线程-局部变量管控

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

5 在备用存储装置上的堆分配

硬件技术在持续进化,现在可以使用与传统 DRAM 具有相同接口和类似性能特点的非易失性 RAM 。这项 JEP 将使得 JVM 能够使用适用于不同类型的存储机制的堆。

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工具,这个很简单并且很重要。

你可能感兴趣的:(java新特性,java)