距离 2019 年结束,只剩下 30 几天了。你作好准备迎接 2020 年了吗?html
一到年末,人就特别容易陷入回忆和比较之中,好比说这几天, 的对比挑战就火了!java
这个话题登上了微博的热搜榜,也刷爆了朋友圈,人们纷纷晒出本身2017和2019的照片对比。算法
做为一个技术宅,我也作了一个对比:express
2017 年 9 月 21 日,Java 9 正式发布,而且在2017年8月,JCP执行委员会提出将Java的发布频率改成每六个月一次,新的发布周期严格遵循时间点,将在每一年的3月份和9月份发布。编程
Java 9 于 2017 年 9 月 22 日正式发布,带来了不少新特性,其中最主要的变化是已经实现的模块化系统。安全
主要特性:服务器
Java 10 于 2018 年3 月21 日正式发布,这是做为当今使用最普遍的编程语言之一的Java 语言的第十个大版本。编程语言
主要特性:模块化
Java 11 于 2018 年9 月25 日正式发布,可在生产环境中使用!这是自 Java 8 后的首个长期支持版本,将支持到2026年。函数式编程
主要特性:
Java 12 于 2019 年3 月 19 日正式发布,自Java 11 这一Long Term Support 版本发布以后半年的又一次版本更新
主要特性:
Java 13 于 2019 年 9 月 17 日正式发布,这一版本中引入了文本块等功能。
主要特性:
一、本地变量类型推断
在之前的版本中,咱们想定义定义局部变量时。咱们须要在赋值的左侧提供显式类型,并在赋值的右边提供实现类型,以下面的片断所示:
MyObject value = new MyObject();
List list = new ArrayList();
复制代码
在Java 10中,你能够这样定义对象:
var value = new MyObject();
var list = new ArrayList();
复制代码
正如你所看到的,本地变量类型推断将引入“var”关键字,而不须要显式的规范变量的类型。
switch表达式
在JDK 12中引入了Switch表达式做为预览特性。在Java 13中又修改了这个特性,引入了yield语句,用于返回值。这意味着,switch表达式(返回值)应该使用yield, switch语句(不返回值)应该使用break。
在之前,咱们想要在switch中返回内容,仍是比较麻烦的,通常语法以下:
int i;
switch (x) {
case "1":
i=1;
break;
case "2":
i=2;
break;
default:
i = x.length();
break;
}
复制代码
在JDK13中使用如下语法:
int i = switch (x) {
case "1" -> 1;
case "2" -> 2;
default -> {
int len = args[1].length();
yield len;
}
};
复制代码
或者
int i = switch (x) {
case "1": yield 1;
case "2": yield 2;
default: {
int len = args[1].length();
yield len;
}
};
复制代码
三、文本块支持
text block,文本块,是一个多行字符串文字,它避免了对大多数转义序列的须要,以可预测的方式自动格式化字符串,并在须要时让开发人员控制格式。
咱们之前从外部copy一段文本串到Java中,会被自动转义,若有一段如下字符串:
<html>
<body>
<p>Hello, world</p>
</body>
</html>
复制代码
将其复制到Java的字符串中,会展现成如下内容:
"<html>\n" +
" <body>\n" +
" <p>Hello, world</p>\n" +
" </body>\n" +
"</html>\n";
复制代码
即被自动进行了转义,这样的字符串看起来不是很直观,在JDK 13中,就可使用如下语法了:
"""
<html>
<body>
<p>Hello, world</p>
</body>
</html>
""";
复制代码
使用“”“做为文本块的开始符合结束符,在其中就能够放置多行的字符串,不须要进行任何转义。看起来就十分清爽了。
从2017到2019,不果短短两年时间,Java就发布了5个版本。每一个版本都会有不少特性出来,这些特性中虽然没有像Java 8那样提供函数式编程这样的重大改变,可是也提供了switch表达式和block text等你们期待已久的特性。
2年过去了,在Java学习的道路上,你进步了吗?欢迎谈谈你这两年的变化。