您可以使用本指南获取有关如何查找和安装最新Java的实用信息、Java语言功能的概述,包括Java版本8-13。
了解Java发行版之间的差异(AdoptOpenJdk,OpenJDK,OracleJDK等):Java版本安装完整指南
基本上,所有 Java 8语言功能(现在不要挑剔)也可以在Java 13中使用。两者之间的所有其他Java版本也是如此。
反过来,这意味着Java 8的所有语言功能都可以作为非常好的Java基础知识,而其他所有功能(Java 9-13)则是在该基线之上的许多附加功能。
以下是特定版本所提供内容的快速概述:
-Java 8-
Java 8是一个巨大的版本,您可以在Oracle网站上找到所有功能的列表。不过,我想在此提及两个主要功能:
1. 语言功能:Lambdas等
在Java 8之前,无论何时要实例化(例如)新的Runnable,都必须编写一个匿名内部类,如下所示:
Runnable runnable = new Runnable(){ |
对于lambda,相同的代码如下所示:
Runnable runnable = () -> System.out.println("Hello world two!"); |
您还获得了方法参考,重复注释,接口的默认方法以及其他一些语言功能。
2.集合和流
在Java 8中,您还获得了集合的函数式操作,也称为Stream API。一个简单的例子:
List<String> list = Arrays.asList("franz", "ferdinand", "fiel", "vom", "pferd"); |
现在,在Java 8之前的版本中,您基本上必须编写for循环才能对该列表进行处理。
使用Streams API,您可以执行以下操作:
list.stream() |
-Java 9-
Java 9也是一个相当大的发行版,其中增加了一些功能:
1.Collections
集合有几个新的帮助器方法,可以轻松地构造列表,集合和map。
List<String> list = List.of("one", "two", "three"); |
2.stream
Streams以takeWhile,dropWhile,iterate方法的形式添加了一些附加功能。
Stream<String> stream = Stream.iterate("", s -> s + "s") |
3. Optionals
Optionals有了ifPresentOrElse方法。
user.ifPresentOrElse(this::displayAccount, this::displayLogin); |
4.Interfaces
接口提供私有方法:
public interface MyInterface { |
其他语言特性:还有其他一些改进,例如改进的try-with-resources语句或菱形运算符扩展。
5. jshell
Java提供了一个Shell,您可以在其中试用简单的命令并立即获得结果。
% jshell |
6.HTTP客户端
Java 9带来了新HttpClient的初始预览版。直到那时,Java的内置Http支持还只是底层的,您不得不依靠第三方库,例如Apache HttpClient或OkHttp(它们是很棒的库,btw!)。
使用Java 9,Java有了自己的现代客户端-尽管处于预览模式,这意味着在更高版本的Java中可能会有所更改。
7.模块项目:Java模块和多版本jar文件
Java 9获得了Jigsaw Module System,它在某种程度上类似于旧的OSGI规范。深入了解Jigsaw不在本指南的范围内,但是请查看以前的链接以了解更多信息。
多版本.jar文件使一个.jar文件成为可能,其中包含针对不同JVM版本的不同类。因此,例如,在Java 8与Java 10上运行时,您的程序可以表现不同/具有不同的类。
-Java 10-
Java 10进行了一些更改,例如Garbage Collection等。但是,作为开发人员,您唯一可能真正看到的更改就是引入了“ var”关键字,也称为局部变量类型推断。
局部变量类型推断:var-keyword:
// Pre-Java 10 |
-Java 11-
从开发人员的角度来看,Java 11的发行版也较小。
1.字符串和文件
字符串和文件有一些新方法(此处未列出所有方法):
"Marco".isBlank(); |
2.运行源文件
从Java 10开始,您可以直接运行Java源文件,而无需先对其进行编译。迈向脚本编写的一步。
java MyScript.java |
3. Lambda参数的局部变量类型推断(var)
(var firstName, var lastName) -> firstName + lastName |
4.HttpClient
来自Java 9的HttpClient的最终非预览版本。
5.飞行记录器,无操作垃圾收集器,已弃用Nashorn-Javascript-Engine等
-Java 12-
Java 12有一些新功能和清理功能,但是这里唯一值得一提的是Unicode 11支持和新开关表达式的预览,您将在下一节中看到。
-Java 13-
您可以在此处找到完整的功能列表,但实际上,您将获得Unicode 12.1支持,以及两个新的或改进的预览功能(将来可能会更改):
1.switch表达式
现在可以返回一个值。而且,您可以对表达式使用lambda样式的语法,而不会出现直通/突破问题:
旧的switch语句如下所示:
switch(status) {
case SUBSCRIBER:
// code block
break;
case FREE_TRIAL:
// code block
break;
default:
// code block
}
在Java 13中,switch语句如下所示:
boolean result = switch (status) { |
2.多行字符串
可以在Java中执行此操作:
String htmlBeforeJava13 = "<html>\n" + |