,,Java 11 正式发布,这 8 个逆天新特性教你写出更牛逼的代码

,,Java 11 正式发布,这 8 个逆天新特性教你写出更牛逼的代码

美国当地时间9月25日,Oracle官方宣布Java 11 (18.9 LTS)正式发布,并且可以在生产环境中使用!这是Java 8以来第一个长期支持的版本。

美国时间9月25日,Oralce正式发布Java 11,这是Java 8支持的第一个长期版本。值得大家关注,可以在以下地址下载:

https://www . Oracle . com/tech network/Java/Java se/downloads/JDK 11-downloads-5066655 . html

为什么是长期版?请参见下面的官方支持路线图。

可以看出,Java 8扩展将支持到2025年,而Java 11扩展将支持到2026年。

现在大部分都在用Java 8,Java 9,Java 10,但是目前用的人很少。至少,我还没有发现有公司在生产环境中应用它们,就是找死。

现在Java 11有了长期支持,已经包含了9和10的所有功能,9和10自然会活到最后。

那么我们来看下 从 Java 9 - 11 都有哪些重要的新特性呢?

1、本地变量类型推断

这位博主写了一篇文章,详细介绍了Java 10带来的这个新特性。

什么是局部变量类型推断?

var javastack=' javastack

system . out . println(Java stack);

可以看到,局部变量类型推断是指左边的类型直接由var定义,而不是编写具体的类型。编译器可以根据右边的表达式自动推断类型,比如上面的字符串。

var javastack=' javastack

等于:

String javastack=' javastack

更多详情可参考本文《Java 10 实战第 1 篇:局部变量类型推断》,此处不再赘述。

2、字符串加强

Java 11增加了一系列字符串处理方法,如下所示。

//确定字符串是否为空

' '.is blank();//真

//删除前导和尾随空格

Javastack。strip();//'Javastack '

//删除尾随空格

Javastack。strip trailing();//' Javastack '

//删除标题空间

Javastack。strip leading();//'Javastack '

//复制字符串

Java。重复(3);//'JavaJavaJava '

//行数

' A\nB\nC '。线条()。count();//3

3、集合加强

从Java 9开始,Jdk为集合(List/Set/Map)添加了of和copyOf方法。它们都是用来创建不可变集合的。让我们看看它们的用途和区别。

示例1:

var list=List.of('Java ',' Python ',' C ');

var copy=list . copy of(list);

system . out . println(list==copy);//真

示例2:

var list=new ArrayList string();

var copy=list . copy of(list);

system . out . println(list==copy);//假

示例1和示例2具有相似的代码。为什么一个是真的,一个是假的?

看看它们的源代码:

静态列表(E.元素){

switch (elements.length) { //元素的隐式空检查

案例0:

返回immutable collections . emptylist();

案例1:

返回新的不可变集合。list 12(elements[0]);

案例二:

返回新的不可变集合。List12(元素[0],元素[1]);

默认值:

返回新的不可变集合。ListN(元素);

}

}

静态E ListE copyOf(收藏?扩展E coll) {

返回immutable collections . list copy(coll);

}

静态E ListE listCopy(收藏?扩展E coll) {

if(coll instance of AbstractImmutableList coll . getclass()!=SubList.class) {

return(ListE)coll;

}否则{

return(ListE)list . of(coll . toarray());

}

}

可以看出,copyOf方法将首先确定源集合是否属于AbstractImmutableList类型。如果是,就直接返回。如果没有,它将调用的来创建新的集合。

例2因为new创建的集合不属于immutable AbstractImmutableList类的子类,所以copyOf方法创建了一个新的实例,所以为false。

注意:使用of和copyOf创建的集合是不可变的集合,不能进行添加、删除、替换、排序等操作。否则,将报告java.lang.unsupported操作异常。

上面演示了List的of和copyOf方法,还有Set和Map接口。

4、Stream 加强

Stream是Java 8中的一个新特性,Java 9开始给Stream增加以下四个新方法。

1)添加单参数构造方法,可以为空。

Stream.ofNullable(空)。count();//0

2)添加takeWhile和dropWhile方法。

(1,2,3,2,1)的流。takeWhile(n - n 3)。collect(collectors . to list());//[1, 2]

从计算开始,到n ^ 3时结束。

(1,2,3,2,1)的流。dropWhile(n - n 3)。collect(collectors . to list());//[3, 2, 1]

和上面相反,一旦n 3不成立,就会被算计。

3)迭代重载

这个iterate方法的新重载方法允许您提供一个谓词(判断条件)来指定何时结束迭代。

如果你不熟悉JDK 8中的Stream,可以看看之前分享的这一系列教程。

5、Optional 加强

Optnal还增加了几个非常酷的方法。现在很容易将可选的转换成流,或者当可选的为空时给它一个替换。

Optional.of('javastack ')。orelsthrow();//javastack

Optional.of('javastack ')。流()。count();//1

Optional.ofNullable(null)。或(()- Optional.of('javastack '))。get();//javastack

6、InputStream 加强

InputStream最后还有一个非常有用的方法:transferTo,可以用来直接向OutputStream传输数据。在处理原始数据流时,这是一种非常常见的用法,如下例所示。

var class loader=class loader . getsystemclass loader();

var inputStream=class loader . getresourceasstream(' Java stack . txt ');

var Java stack=file . create tempfile(' Java stack 2 ',' txt ');

try(var output stream=new file output stream(Java stack)){

inputstream . transferto(output stream);

}

7、HTTP Client API

这是Java 9引入的一个孵化HTTP客户端API,用来处理HTTP请求。这个API支持同步和异步,但是它已经在Java 11中正式可用。你可以在java.net包中找到这个API。

看一下HTTP客户端的用法:

var request=http request . new builder()。uri(uri . create(' https://Java stack . cn '))。获取()。build();

var client=http client . newhttpclient();

//同步

HttpResponseString response=client . send(request,HttpResponse。body handlers . of string());

system . out . println(response . body());

//异步

client.sendAsync(请求,HttpResponse。BodyHandlers.ofString())。然后应用(HttpResponse:body)。then accept(system . out:println);

以上。Get()可以省略,默认的请求方法是GET!

您可以查看这个API的更多示例,稍后您将有机会演示它。

现在Java附带了这个HttpClient API。我们以后有必要用Apache的HTTP客户端工具包吗?

8、化繁为简,一个命令编译运行源代码

看看下面的代码。

//编译

贾瓦茨Javastack.java

//运行

java Javastack

在我们的认知中,要想运行一个Java源代码,必须先编译,再运行,分两步执行动作。在java 11的未来版本中,将直接通过一个java命令来完成,如下所示。

爪哇Javastack.java

更多新特性

用于反应式编程的流程API

Java模块系统

应用程序类数据共享

动态类文件常量

Java REPL (JShell)

飞行记录器

Unicode 10

G1:完全并行的垃圾收集器

ZGC:可扩展的低延迟垃圾收集器

Epsilon:无操作垃圾收集器

反对Nashorn JavaScript引擎

? .

历史新特性文章

Java 11即将到来,编译并运行一个命令。

JDK 11发布计划已经到来,三个新功能已经确定。

Java 10实战第1章:局部变量类型的推断

JDK 5 ~ 10的新特点

JDK 10的10项新功能

JDK 10最重要的5项新功能

JDK 9的9项新功能

Jdk9新特性:简化流关闭新姿势

JDK 8的分类方法

JDK 8新功能的Lambda表达

JDK 8新功能的功能界面

JDK 8新特性的方法参考

JDK 8新特性的接口默认方法和静态方法

JDK 8的可选特性

对JDK 8新特性的重复评论

JDK 8新功能的流流

JDK 8新特性的流流(1)基本体验

JDK 8新特性的流程(2)关键知识点

具有JDK8 (3)归约运算新功能的流

具有JDK 8 (4)并行流新功能的流流

JDK8新特性的流映射(5)

JDK 8号()收藏缩水的新特点

JDK 8流(VII)流和迭代器的新特性

JDK 8新功能的扩展

更多新功能新玩法,可以在' java技术栈'微信微信官方账号后台回复关键词:Java,获取以上所有新功能文章。

结束语

很多人还在用Java 8或者7,但是8的免费更新会在2019年初结束。现在11是长期支持的版本,是学习和入门11的好时机。希望这篇文章能对你有所启发。

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: