【新特性】JDK11
随着JDK11正式发布,带来了许多新的特性。本文主要介绍JDK11的部分新特性和新的API。
一、Local Var
在Lambda表达式中,可以使用var
关键字来标识变量,变量类型由编译器自行推断。
例如:
// LocalVar.java package com.itranswarp.jdk11; import java.util.Arrays; public class LocalVar { public static void main(String[] args) { Arrays.asList("Java", "Python", "Ruby") .forEach((var s) -> { System.out.println("Hello, " + s); }); } }
二、HttpClient
长期以来,如果要访问Http资源,JDK的标准库中只有一个HttpURLConnection
,这个古老的API使用非常麻烦,而且已经不适用于最新的HTTP协议。
JDK11的新的HttpClient支持HTTP/2和WebSocket,并且可以使用异步接口:
// HttpApi.java package com.itranswarp.jdk11; import java.net.URI; import java.net.http.HttpClient; import java.net.http.HttpRequest; import java.net.http.HttpResponse; import java.util.concurrent.CompletableFuture; public class HttpApi { public static void main(String[] args) { HttpRequest request = HttpRequest.newBuilder().uri(URI.create("https://www.qq.com/")).GET().build(); HttpResponse.BodyHandler<String> bodyHandler = HttpResponse.BodyHandlers.ofString(); HttpClient client = HttpClient.newHttpClient(); CompletableFuture<HttpResponse<String>> future = client.sendAsync(request, bodyHandler); future.thenApply(HttpResponse::body).thenAccept(System.out::println).join(); } }
三、List API
对于List
接口,新增了一个of(T...)
接口,用于快速创建List
对象:
List<String> list = List.of("Java", "Python", "Ruby");
List
的toArray()
还新增了一个重载方法,可以更方便地把List
转换为数组。可以比较一下两种转换方法:
// 旧的方法:传入String[]: String[] oldway = list.toArray(new String[list.size()]); // 新的方法:传入IntFunction: String[] newway = list.toArray(String[]::new);
四、读写文件
对Files
类增加了writeString和readString两个静态方法,可以直接把String写入文件,或者把整个文件读出为一个String:
Files.writeString( Path.of("./", "tmp.txt"), // 路径 "hello, jdk11 files api", // 内容 StandardCharsets.UTF_8); // 编码 String s = Files.readString( Paths.get("./tmp.txt"), // 路径 StandardCharsets.UTF_8); // 编码
这两个方法可以大大简化读取配置文件之类的问题。
五、String API
String
新增了strip()
方法,和trim()
相比,strip()
可以去掉Unicode空格,例如,中文空格:
String s = " Hello, JDK11!\u3000\u3000"; System.out.println(" original: [" + s + "]"); System.out.println(" trim: [" + s.trim() + "]"); System.out.println(" strip: [" + s.strip() + "]"); System.out.println(" stripLeading: [" + s.stripLeading() + "]"); System.out.println("stripTrailing: [" + s.stripTrailing() + "]");
输出如下:
original: [ Hello, JDK11! ] trim: [Hello, JDK11! ] strip: [Hello, JDK11!] stripLeading: [Hello, JDK11! ] stripTrailing: [ Hello, JDK11!]
新增isBlank()
方法,可判断字符串是不是“空白”字符串:
String s = " \u3000"; // 由一个空格和一个中文空格构成 System.out.println(s.isEmpty()); // false System.out.println(s.isBlank()); // true
新增lines()
方法,可以非常方便地按行分割字符串:
String s = "Java\nPython\nRuby"; s.lines().forEach(System.out::println);
新增repeat()
方法,可以指定重复次数:
System.out.println("-".repeat(10)); // 打印----------
除了新增的API外,JDK11还带来了EpsilonGC,就是什么也不做的GC,以及ZGC,一个几乎可以做到毫秒级暂停的GC。ZGC还处于实验阶段,所以启动它需要命令行参数-XX:+UnlockExperimentalVMOptions -XX:+UseZGC
。
JDK11是一个LTS版本(Long-Term-Support),所以……
放心升级吧!
【新特性】JDK11的更多相关文章
- jdk11新特性
JDK 11主要特性一览 jdk11即将在9月25号发布正式版.确定的新特性包括以下17个 181 嵌套类可见性控制 309 动态文件常量 315 改进 Aarch64 Intrinsics 318 ...
- 发布倒计时!JDK11为我们带来哪些新特性?
今年7月底,JDK11已经进入了Rampdown Phase Two阶段,这标志着该版本所有特性已经被冻结,不会有新的JEP会加入版本中. 这一阶段将会修复P1–P2级BUG,之后,JDK11预定于今 ...
- JDK10、JDK11、JDK12新特性
JDK10新特性 1.var声明变量 很多人抱怨Java是一种强类型,需要引入大量的样板代码.甚至在这些情况下,给定好变量名,通常很清楚发生了什么,明显类型声明往往被认为是不必要的.许多流行的编程语言 ...
- JDK8~JDK11的新特性
#JDK 1.8 新特性接口中的静态方法 只能由接口自己调用 接口中的默认方法 可以不被覆盖 #JDK 1.9 新特性(可能在JDK8中被忽略了,没来得及加)接口可以定义私有方法,但是只能让自己调用, ...
- Java5~11新特性
Java5~11版本新特性 Java5 Java6 Java7 Java8 Java9 Java10 Java11 Java5 Java5开发代号为Tiger(老虎),于2004-09-30发行 特性 ...
- JDK 5 ~ 10 新特性倾情整理!
JDK 5 ~ 10 新特性倾情整理! 最近连 JDK11都在准备发布的路上了,大家都整明白了吗?也许现在大部分人还在用6-8,8的新特性都没用熟,9刚出不久,10-11就不用说了. 为了大家对JDK ...
- JDK 5 ~ 11 新特性倾情整理
为了大家对JDK有一个全面的了解,下面我为大家整理了JDK5~11的所有关键新特性! 先看一下JDK的版本迭代图: 注: OpenJDK和JDK区别 GPL协议通用性公开许可证(General ...
- Java11新特性解读
在去年的9月26日,Oracle官方宣布Java11正式发布,这是Java大版本周期变化后的第一个长期支持版本,非常值得关注.Java9和Java10都在很短的时间内就过渡了,所以,Java11将是一 ...
- Java 11 新特性介绍
Java 11 已于 2018 年 9 月 25 日正式发布,之前在Java 10 新特性介绍中介绍过,为了加快的版本迭代.跟进社区反馈,Java 的版本发布周期调整为每六个月一次——即每半年发布一个 ...
随机推荐
- jmeter 之系统参数根据条件修改
背景:在setup 线程组定义了一个全局变量a:${__setProperty(a,2,)},线程组里有两个线程通过判断a的值来决定是否执行sample,线程组的最后通过beanshell sampl ...
- spring注解:反射与配置
上图运行结果按下图配置文件中的配置,进行的spring扫描加载.无论是componentScan方式,还是xml配置方式,如果one是实现了一个接口的类,如one_Interface,那么在程序中用o ...
- 字符串只截取小数后n位,不做四舍五入
例子1: var num = "112233.99887766";console.log(num.substring(0,(num.indexOf(".")+5 ...
- Oracle集群时区
1.环境及问题 OS:SUSE 12SP3 DB:12.2.0.1.190115 2节点RAC Q:集群日志的时间和主机时间相差较大 grid@WWJD1:~> date Mon Feb 11 ...
- 00JAVA语法基础_动手动脑
1.仔细阅读示例: EnumTest.java,运行它,分析运行结果? 枚举类型的使用是借助ENUM这样一个类,这个类是JAVA枚举类型的公共基本类.枚举目的就是要让某个变量的取值只能为若干固定值中的 ...
- 安装mongodb服务
摘要:https://www.cnblogs.com/z-x-y/p/9305635.html 欢迎转载,转载请标明出处:https://www.cnblogs.com/z-x-y/p/9305635 ...
- web自动化测试python+selenium学习总结----selenium安装、浏览器驱动下载
一.安装selenium 命令安装selenium库 :pip install -U selenium 查看selenium是否安装成功:pip list PS:有时会有异常,安装失败,可以尝试去s ...
- 关于 mysql2 -v '0.3.21'(CentOS7.3)
个人由于没有安装mysql而是装的MariaDB,所以网上说安装mysql,故没有采用,经查阅资料后,详细情况如下: Gem时报错: [root@localhost ~]# gem install m ...
- tab切换的效果——仿照今日头条APP的切换效果
说点废话;不知道是哪一版本起头条的tab切换效果就变了,一直琢磨着这个事,去度娘那里也没有什么结果:正好这两天有空就尝试做了一下:用前端的技术来实现: 先看效果吧:上面的tab随着slide滑动,上面 ...
- python-布尔表达式
1.布尔类型(bool): 1.只有两种情况 真/假 (True / False) 2. print(type(False)) # <class 'bool'> type() ...