一篇文章带你理解JDK11的新特性 @杨章隐

前阵子JAVA推出了最新版本Java11,原本以为特性会和8到9,9到10一样更新一小(没)部(啥)分(变)功(动)能,但是去到官网看了一下,我震惊了,这次更新其实还蛮大,不过总结了一下,相较于之前的版本也就八大特性:
1、变量类型推断
学习过Javascript的都逃不过var这个数据类型,jdk11也加入类似javascript特性,通过定义局部变量var,自动根据右边的表达式推断变量类型。
如:

var text = “Hello World”;
System.out.println(text);

其实就等于

String text = “Hello World”;
System.out.println(text);

这样的特性虽然在开发流程中提供了一定的便捷性,但是如果开发过程中,开发人员没有一定规范,滥用var类型,或者公司并没有相关的规范,今后的代码可能是满屏幕的var,后期维护会有些许不方便。当然这是我的推断,不排除以后的真香警告!

2、扩展字符串特性功能方法
JDK11增加了一系列的字符串方法,相信这次更新,在处理字符串的问题上会更加方便更加规范。

//定义变量
String text = “Hello World”;
// 判断字符串是否为空
text.isBlank(); // 返回false
// 去除首尾空格
" Hello World ".strip(); // 返回"Hello World"
// 去除尾部空格
" Hello World ".stripTrailing(); // 返回" Hello World"
// 去除首部空格
" Hello World ".stripLeading(); // 返回"Hello World "
// 复制字符串
"Hello".repeat(3);// 返回"HelloHelloHello"
// 统计行数
"Hello\nWorld".lines().count(); // 返回2

3、扩展集合特性功能方法
这个其实从JDK9已经有了,集合(List/ Set/ Map)都添加了 of 和 copyOf 方法,他们用来创建不可变的集合。

那么它跟普通集合有什么区别呢?

static  List of(E... elements) {
  switch (elements.length) { // implicit null check of elements
    case 0:
        return ImmutableCollections.emptyList();
    case 1:
        return new ImmutableCollections.List12<>(elements[0]);
    case 2:
        return new ImmutableCollections.List12<>(elements[0], elements[1]);
    default:
        return new ImmutableCollections.ListN<>(elements);
  }
}
static  List copyOf(Collection coll) {
    return ImmutableCollections.listCopy(coll);
}
static  List listCopy(Collection coll) {
    if (coll instanceof AbstractImmutableList && coll.getClass() != SubList.class) {
        return (List)coll;
    } else {
        return (List)List.of(coll.toArray());
    }
}

通过源码我们可以看出,调用copyOf 的方法会首先判断传入集合是否为AbstractImmutableList 类型,是的话直接返回,如果不是会调用of创建一个新的集合对象返回。

所以

var list = new ArrayList();
var copy = List.copyOf(list);
if(list == copy)
    System.out.println(Hello World);

你会发现if(list == copy)为false,因为集合list不属于不可变集合
AbstractImmutableList 类的子类,所以copyOf 方法重新创建了一个新的实例。
注:之所以是不可变集合是因为使用of和copyOf创建的集合,不能进行增,删,改,排序等操作,不然系统会抛出 java.lang.UnsupportedOperationException 异常。

4、更加简洁的编译和运行。只需一个命令,全部搞定。
以前我们需要:

// 编译
javac HelloWorld.java

// 运行
java HelloWorld

现在只需要

java Javastack.java

更加简单,简洁。
5、HTTP Client API
其实HTTP Client API早再Java9的时候就已经引入了,在10不断优化更新,最终在此次Java11中正式发布。
包名由jdk.incubator.http改为java.net.http。HTTP Client API实现了HTTP(1.1和2)和WebSocket,用来取代遗留的java.net.HttpURLConnection。该API用来在Java程序中作为客户端请求HTTP服务,Java中服务端HTTP的支持由Servlet实现。
HTTP Client API的主要类包括:

java.net.http.HttpClient
java.net.http.HttpRequest
java.net.http.HttpResponse
java.net.http.WebSocket

HTTP Client API特性:

对大多数场景提供简单易用的阻塞模型。
通过异步机制支持事件通知。
完整支持HTTP协议的特性。
易于建立WebSocket握手。
支持HTTP/2,包括协议升级(Upgrade)和服务端推送(server push)。
支持 HTTPS/TLS。
和现有的其他实现类库相比,性能相当或有提升,内存占用少。

后续补充请持续关注。

你可能感兴趣的:(一篇文章带你理解JDK11的新特性 @杨章隐)