美国当地时间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的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。