Java 11 新特性(LTS版本)

Java 11 新特性

Java 11Java 8 之后的第一个 LTS 版本,于 2018 年 9 月 25 日正式发布,但是也自从 Java 11 开始, Oracle JDK 不再可以免费的用于商业用途,当然如果你是个人使用,或者是使用 Open JDK ,那么还是可以免费使用的。

有些人很关心 Java 11 是否收费,Oracle 表示除非你在生产中使用,否则可以不用收费。

即使收费,免费的 Open JDK 不也很香吗。

此篇文章写一下部分Java 11的新特性。

Java 11 全部的新特性,请看官网:JDK 11 发行说明

Java各个版本的文档入口:Java平台,标准版文档

Java各个版本下载:https://jdk.java.net/archive/

1、String API 改动

字符串绝对是 Java 中最常用的一个类了,String 类的方法使用率也都非常的高,在 Java 11 中又为 String 类带来了一系列的好用操作。

  1. isBlank () 判空。

    // 判空,blank里我放入了全角空格,半角空格,TAB
    String blank = "    ";
    System.out.println(blank.isBlank());
    
    // 输出
    // true
    
  2. lines () 分割获取字符串流。

    // lines 返回一个 Stream
    String line = "a\nb\nc";
    Stream<String> lines = line.lines();
    
    // 使用 lambda 遍历
    lines.forEach(System.out::println);
    
    // 输出
    // a
    // b
    // c
    
  3. repeat () 复制字符串

    // 复制字符串
    String repeat = "我的微信:wlw,";
    String repeat3 = repeat.repeat(3);
    System.out.println(repeat3);
    
    // 输出
    // 我的微信:wlw,我的微信:wlw,我的微信:wlw,
    
  4. strip () 去除前后空白字符。

    // 去除前后空白
    String strip = "     https://www.baidu.com  ";
    System.out.println("==" + strip.trim() + "==");
    // 去除前后空白字符,如全角空格,TAB
    System.out.println("==" + strip.strip() + "==");
    // 去前面空白字符,如全角空格,TAB
    System.out.println("==" + strip.stripLeading() + "==");
    // 去后面空白字符,如全角空格,TAB
    System.out.println("==" + strip.stripTrailing() + "==");
    
    // 输出
    // ==  https://www.baidu.com  ==
    // ==https://www.baidu.com==
    // ==https://www.baidu.com  ==
    // ==     https://www.baidu.com==
    

    这里注意,trim 只能去除半角空格,而 strip去除各种空白符

2、File API改动

读写文件变得更加方便。

// 创建临时文件
Path path = Files.writeString(Files.createTempFile("test", ".txt"),  "https://www.baidu.com");

System.out.println(path);
// 读取文件
// String ss = Files.readString(Path.of("file.json"));
String s = Files.readString(path);
System.out.println(s);

// 结果
// https://www.wdbyte.com

3、HTTP Client

Java 11 中 Http Client API 得到了标准化的支持。且支持 HTTP/1.1 和 HTTP/2 ,也支持 websockets。

你可以像这样发起一个请求:

HttpClient client = HttpClient.newHttpClient();
HttpRequest request = HttpRequest.newBuilder()
        .uri(URI.create("https://www.hao123.com"))
        .build();
// 异步
client.sendAsync(request, HttpResponse.BodyHandlers.ofString())
        .thenApply(HttpResponse::body)
        .thenAccept(System.out::println)
        .join();

// 同步
HttpResponse<String> response = client.send(request, HttpResponse.BodyHandlers.ofString());
System.out.println(response.body());

更多的如同步异步请求,并发访问,设置代理等方式,可以参考 OpenJDK 官方文档:

http://openjdk.java.net/groups/net/httpclient/recipes-incubating.html(opens new window)

4、Lambda 局部变量推断

Java 10 中引入了 var 语法,可以自动推断变量类型。在 Java 11 中这个语法糖可以在 Lambda 表达式中使用了。

var hashMap = new HashMap<String, Object>();
hashMap.put("wechat", "wlw");
hashMap.put("website", "https://www.baidu.com");
hashMap.forEach((var k, var v) -> {
    System.out.println(k + ": " + v);
});

这里需要注意的是,(var k,var v) 中,k 和 v 的类型要么都用 var ,要么都不写,要么都写正确的变量类型。而不能 var 和其他变量类型混用。

5、单命令运行 Java

自从学习 Java 的第一天,我们就知道运行一个 Java 文件,要先用 javac 命令编译,再用 java 命令运行,而现在只要一个 java 命令就可以运行了。

$ cat Main.java

public class Main {

    public static void main(String[] args) {
        System.out.println("wechat:wlw");
    }
}

$ java Main.java
wechat:wlw

6、免费的飞行记录器

商业版 JDK 中一直有一款低开销的事件信息收集工具,也就是飞行记录器(Java Flight Recorder),它可以对 JVM 进行检查、分析、记录等。当出现未知异常时可以通过记录进行故障分析。这个好用的工具在 Java 11 中将开源免费。所有人都可以使用这个功能了。

7、其他更新

  1. JEP 309 - 添加动态文件常量。
  2. JEP 318 - 添加 Epsilon 垃圾收集器。
  3. JEP 320 - 删除 Java EE 和 corba 模块(java.xml.ws, java.xml.bind, java.activation, java.xml.ws.annotation, java.corba, java.transaction, java.se.ee, jdk.xml.ws, jdk.xml.bind)。
  4. JEP 329 - 增加加密算法 chacha20,poly1305 的实现。
  5. JEP 333 - 引入实验性的 ZGC 垃圾收集器,保证停摆时间不会超过 10ms。
  6. JEP 335 - 废弃 Nashorn JavaScript 引擎

Java 11 全部的新特性,请看官网:[JDK 11 发行说明](

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
### 回答1: Java每一个版本都提供了一些新的特性,例如Java 8提供了Lambda表达式、Stream API、函数式接口、新的日期/时间API等,Java 9提供了模块系统、集合视图、可复用注解等,Java 10提供了局部变量类型推断等,Java 11提供了HTTP客户端API、强制类型检查等等。 ### 回答2: Java是一种广泛使用的高级编程语言,从最初的Java 1.0版本到最新的Java 17版本,每个版本都带来了许多新的特性和改进。 Java 1.0版本是最初发布的版本,它引入了Java虚拟机(JVM)、Java类库和基本的面向对象编程概念,这使得Java成为了跨平台开发的利器。 Java 2版本引入了许多重要的更新,最重要的是引入了Java 2平台标准版(Java SE)和企业版(Java EE)。Java SE增加了许多新的特性,如集合框架、内部类、异常处理、反射等。Java EE则提供了更丰富的企业级开发功能,如EJB、JSP、Servlet等。 Java 5版本引入了许多重要的语言和库层面的改进。最重要的特性是引入了泛型,使得编写类型安全的代码更加容易。此外,还引入了自动装箱和拆箱、枚举类型、可变参数和注解等特性,大大提高了开发效率和代码可读性。 Java 8版本引入了最大的改进,即函数式编程特性。引入了Lambda表达式和函数式接口,可以更方便地使用函数式编程风格。此外,还引入了Stream API,用于便捷地进行集合操作和并行处理。 Java 9版本引入了模块化系统,将JDK和应用程序分割为一组模块,提高了应用程序的可维护性和安全性。还引入了新的集合类和改进的JVM。 Java 11版本引入了长期支持(LTS),并提供了一些重要的更新,如Lambda参数简化、局部变量类型推断和Http Client API。 Java 17版本是最新发布的版本,引入了一些重要的特性和改进,如Sealed Class、Pattern Matching for switch、Foreign Function and Memory API等,提供了更好的开发体验和性能。 总的来说,Java的不同版本都带来了许多新的特性和改进,使得Java保持了其广泛使用和持久性。无论是语言层面的改进,还是库和工具的增强,都为开发者提供了更多的选择和更高的效率。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

悬浮海

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值