对不起我拖后腿了!我才刚用上Java 11

开发 后端
下文将要实验验证的一些新特性其实也并非 Java11才引入,很多其实在 Java9和 Java10时就已经引入,只不过到了 Java11这个稳定版才沉淀下来。

[[318036]]

一个小纠结

很多初学Java的小伙伴经常咨询:

  • 到底该安装哪个版本的JDK比较好?
  • Java 8到底还够不够用?
  • Java 11究竟有什么改进?
  • 是不是Java版本越新越好?
  • ……

是这样,官网现在其实都已经出到Java 13版本了,并且提供下载使用。

 

对不起我拖后腿了!我才刚用上Java 11

但目前市场上主流的稳定版当然还得属Java 8和Java 11,而目前大部分公司的生产环境还是 Java8居多。所以如果从自学角度出发,我觉得这两个版本都OK,其他中间的一些比如 Java9、 Java10这些非稳定版就不用考虑了。

Java11 vs Java8

 

对不起我拖后腿了!我才刚用上Java 11

Java 11相对于Java 8确实有一部分进化,除了有很多内部的升级(比如开销和时延更低的GC、TLS1.3加持等等)之外,对于初学使用者来说也有一些语言使用层面的进化。

正好最近我在自己的个人小项目上尝试升级使用了一下 Java11(公司项目咱也不敢动、也不敢问,只好动自己的个人项目),因此本文从实际代码编写角度来大致体验一下我个人使用 Java11之后相对 Java8所感觉到的一些比较深刻的进化,官方文档里说得也非常清楚了: https://docs.oracle.com/en/java/javase/11/

我这次实验装的 Java11版本是 11.0.6:

 

对不起我拖后腿了!我才刚用上Java 11

下文将要实验验证的一些新特性其实也并非 Java11才引入,很多其实在 Java9和 Java10时就已经引入,只不过到了 Java11这个稳定版才沉淀下来。

变量类型推断

新版Java引入了一个全新的类型关键字 var,用 var来定义的变量不用写具体类型,编译器能根据 =右边的实际赋值来自动推断出变量的类型:

1、普通局部变量

 

对不起我拖后腿了!我才刚用上Java 11

怎么样?是不是有一种在使用类似JavaScript这种弱类型语言的错觉?

2、for循环中使用

 

对不起我拖后腿了!我才刚用上Java 11

这地方就能看出用 var定义局部变量的优势了,假如这个例子中集合里的元素类型更为复杂,是类似 List>这种嵌套类型的话, var定义就非常简洁明了!

3、当然,有些情况是不能使用的

var类型变量一旦赋值后,重新赋不同类型的值是不行的,比如:

 

对不起我拖后腿了!我才刚用上Java 11

定义 var类型变量没有初始化是不行的,比如:

 

对不起我拖后腿了!我才刚用上Java 11

另外,像类的 成员变量类型、 方法入参类型、 返回值类型等是不能使用 var的,比如:

 

对不起我拖后腿了!我才刚用上Java 11

官方HTTP Client加持

是的!

现在 JDK官方就自带 HTTPClient了,位于 java.net.http包下,支持发送同步、异步的 HTTP请求,这样一来,以前咱们常用的HTTP请求客户端诸如: OKHttp、 HttpClient这种现在都可以退下了!

发送同步请求:

 

对不起我拖后腿了!我才刚用上Java 11

发送异步请求:

 

对不起我拖后腿了!我才刚用上Java 11

当然你也可以自定义请求头,比如携带 JWT Token权限信息去请求等:

 

对不起我拖后腿了!我才刚用上Java 11

String处理增强

新版字符串 String类型增加了诸如: isBlank()、 strip()、 repeat()等方便的字符串处理方法

 

对不起我拖后腿了!我才刚用上Java 11

集合增强

主要是增加了诸如 of()和 copyOf()等方法用于更加方便的创建和复制集合类型

 

对不起我拖后腿了!我才刚用上Java 11

函数式编程增强

我印象最深的是对 Stream流增加了诸如 takeWhile()和 dropWhile()的截止结算方法:

 

对不起我拖后腿了!我才刚用上Java 11

文件读写增强

1、Files类增强

我们以前心心念的直接能把文件内容读取到 String以及 String回写到文件的功能终于支持了,可以通过 Files类的静态方法 writeString()和 readString()完成:

 

对不起我拖后腿了!我才刚用上Java 11

2、InputStream增强

InputStream则增加了一个 transferTo()方法,直接将数据丢到 OutputStream去:

 

对不起我拖后腿了!我才刚用上Java 11

支持源文件直接运行(666!)

比如我写一个最简单的 HelloWorld程序:

 

对不起我拖后腿了!我才刚用上Java 11

并保存为 hello.java文件,这时候可以直接用 java指令去运行这个Java源文件,直接省去以前 javac编译源文件的过程:

  1. java hello.java 

 

对不起我拖后腿了!我才刚用上Java 11

怎么样?是不是和python源文件的运行有点像?这个信息量就有点大了,大家可以自行脑补一下

小结

Java 11确有很多改进,但还是那句话,对于初学者来说Java 8足够啦,没必要刻意求新,稳才是最重要的!

责任编辑:未丽燕 来源: 今日头条
相关推荐

2011-01-13 14:55:48

周金桥

2020-01-18 11:13:08

CPU程序存储

2023-01-09 07:50:29

开源开发者项目

2015-08-17 09:43:12

编程创造程序员

2021-03-01 09:16:10

程序员系统模式

2017-10-18 12:05:40

云应用云备份数据

2016-11-09 09:59:01

大数据产业夺冠

2011-03-03 15:51:54

2015-01-21 15:01:32

手游开发中小开发者

2012-05-24 15:53:57

猎豹浏览器

2016-01-14 10:27:29

网速带宽

2014-06-19 10:31:14

团队项目

2020-02-25 09:43:13

区块链blockchain疫情

2013-05-20 16:30:37

移动应用App推广

2021-03-02 11:31:51

技术资讯

2018-09-24 09:15:12

数据仓库大数据

2012-08-15 10:36:53

云计算网速价格战

2013-06-20 11:11:00

程序员经理

2009-09-05 22:09:52

多核计算

2015-06-11 10:08:57

网络延迟应用性能网络监控
点赞
收藏

51CTO技术栈公众号