JDK10、JDK11、JDK12新特性
JDK10新特性
1、var声明变量
很多人抱怨Java是一种强类型,需要引入大量的样板代码。甚至在这些情况下,给定好变量名,通常很清楚发生了什么,明显类型声明往往被认为是不必要的。许多流行的编程语言都已经支持某种形式的局部变量类型推断:如C++ (auto), C# (var), Scala (var/val), Go (declaration with :=)等。
JDK10 可以使用var作为局部变量类型推断标识符,此符号仅适用于局部变量,增强for循环的索引,以及传统for循环的本地变量;它不能使用于方法形式参数,构造函数形式参数,方法返回类型,字段,catch形式参数或任何其他类型的变量声明。
标识符var不是关键字;相反,它是一个保留的类型名称。这意味着var用作变量,方法名或则包名称的代码不会受到影响;但var不能作为类或则接口的名字(但这样命名是比较罕见的,因为他违反了通常的命名约定,类和接口首字母应该大写)。
参考一下示例:
var str = "ABC"; //根据推断为 字符串类型
var l = 10L;//根据10L 推断long 类型
var flag = true;//根据 true推断 boolean 类型
var flag1 = 1;//这里会推断boolean类型。0表示false 非0表示true
var list = new ArrayList<String>(); // 推断 ArrayList<String>
var stream = list.stream(); // 推断 Stream<String>
2、移除javah
移除Native-Header Generation Tool (javah)
JDK10 从JDK中移除了javah 工具。该工具已被JDK8 (JDK-7150368)中添加javac高级功能所取代。此功能提供了在编译java源代码时编写本机头文件的功能,从而无需使用单独的工具。
3、IO流大家族添加charset参数
其它
JDK10中包含许多对JVM的优化:
- 将JDK多存储库合并为单存储库
- 并行Full GC 的G1
- 垃圾回收接口
- 应用数据共享
- 线程局部管控
- 基于实验JAVA 的JIT 编译器
- 备用内存设备上分配堆内存
JDK11新特性
Java的改进提议被称为JEP(JDK Enhancement Proposal 特性增强提议),JDK11是Java改为6月一版之后的第一个LTS版本。
1、HTTPClient转正
JDK9中便引入httpclient模块,但它在jdk.incubator.httpclient包下,在java11被标记为正式,改为java.net.http模块。
2、密码学方面的改进
- 使用RFC 7748中描述的Curve25519和Curve448实现key agreement
- 实现 RFC 7539的ChaCha20 and ChaCha20-Poly1305加密算法
3、java命令运行java文件
java Haha.java直接输出javac Haha.java &&java Haha
的结果。
4、废弃Nashorn JavaScript引擎
Nashorn被废弃,GraalVM为推荐引擎。
5、更灵活的String
去除空白
String text = " \u2000a b ";
Assert.assertEquals("a b",text.strip());
Assert.assertEquals("\u2000a b",text.trim());
Assert.assertEquals("a b ",text.stripLeading());
Assert.assertEquals(" \u2000a b",text.stripTrailing());
trim()和strip()的区别
jshell> var aaa = fullSpace + "aaa" + fullSpace
aaa ==> " aaa "jshell> aaa.strip()
$14 ==> "aaa"jshell> aaa.trim()
$15 ==> " aaa "
lines()
字符串实例方法,使用专门的 Spliterator 来懒惰地提供源字符串中的行
jshell> "test\nhoge\n".lines().map(String::toUpperCase).toArray()
$11 ==> Object[2] { "TEST", "HOGE" }
repeat(int)
按照参数 int 提供的次数来重复字符串的运行次数
jshell> "test".repeat(3)
$7 ==> "testtesttest"
isBlank()
验证当前字符串是否为空,或者是否只包括空白字符(空白字符由 Character.isWhiteSpace(int) 验证)
jshell> var halfSpace = "\u0020"
halfSpace ==> " "jshell> halfSpace.isBlank()
$11 ==> truejshell> var fullSpace = "\u3000"
fullSpace ==> " "jshell> fullSpace.isBlank()
$13 ==> true
6、更方便的IO
Path
of(String, String...)
此前我们需要使用 Paths.get()。现在,我们像其他类一样使用 of()。
Files
writeString(Path, CharSequence)
我们可以使用该方法来保存一个 String 字符串。
jshell> Files.writeString(Path.of("test.txt"), "Hello!!!")
$3 ==> test.txt
readString(Path)
我们可以使用该方法来读取一个 String 字符串。
jshell> Files.readString(Path.of("test.txt"))
$4 ==> "Hello!!!"
Reader
nullReader()
使用该方法,我们可以得到一个不执行任何操作的 Reader。
Writer
nullWriter()
使用该方法,我们可以得到一个不执行任何操作的 Writer。
InputStream
nullInputStream()
使用该方法,我们可以得到一个不执行任何操作的 InputStream。
OutputStream
nullOutputStream()
使用该方法,我们可以得到一个不执行任何操作的 OutputStream。
JDK12新特性
1、switch语句
import java.io.IOException;import static java.util.Calendar.*;class Haha {public static void main(String[] args) throws IOException, InterruptedException {var day = 2;switch (day) {case MONDAY, FRIDAY, SUNDAY -> System.out.println(6);case TUESDAY -> System.out.println(7);case THURSDAY, SATURDAY -> System.out.println(8);case WEDNESDAY -> System.out.println(9);}
}
}
switch也可以用作语句
System.out.println(switch (day) {case MONDAY, FRIDAY, SUNDAY -> 6;case TUESDAY -> 7;case THURSDAY, SATURDAY -> 8;case WEDNESDAY -> 9;default -> -1;
});
2、数字转字符串NumberFormat
var cnf = NumberFormat.getCompactNumberInstance(Locale.CHINA, NumberFormat.Style.SHORT);
System.out.println(cnf.format(1_0000));
System.out.println(cnf.format(1_9200));
System.out.println(cnf.format(1_000_000));
System.out.println(cnf.format(1L << 30));
System.out.println(cnf.format(1L << 40));
System.out.println(cnf.format(1L << 50));
System.out.println(NumberFormat.getCompactNumberInstance(Locale.CHINA, NumberFormat.Style.SHORT).format(12345));
System.out.println(NumberFormat.getCompactNumberInstance(Locale.CHINA, NumberFormat.Style.LONG).format(12345));
3、String的成员函数非常多
transform
java @Test public void testStringTransform(){ System.out.println("hello".transform(new Function<String, Integer>() { @Override public Integer apply(String s) { return s.hashCode(); } })); }
indent
@Test
public void testStringIndent(){System.out.println("hello".indent(3));
}
其它
JDK12放弃了对jdk6及其以前版本的支持。
参考资料
https://www.cnblogs.com/peter1018/p/9234490.html
https://segmentfault.com/a/1190000016527932
https://www.oschina.net/news/98314/java-11-api-changes-so-far
转载于:https://www.cnblogs.com/weiyinfu/p/10941334.html
JDK10、JDK11、JDK12新特性相关推荐
- JDK11的新特性:新的HTTP API
文章目录 简介 使用HTTP Client请求的基本流程 创建HTTP Client 创建HTTP Request 发送HTTP请求 异步HTTP请求 总结 JDK11的新特性:新的HTTP API ...
- JDK11的新特性:HTTP API和reactive streams
文章目录 简介 怎么在java中使用reactive streams POST请求的例子 总结 简介 在JDK11的新特性:新的HTTP API中,我们介绍了通过新的HTTP API,我们可以发送同步 ...
- jdk9、jdk10、jdk11、jdk12、jdk13新特性
我们绝大部分人估计都还在用着jdk8,12其实是一个非LTS(long time support)版本,而11与8一样是LTS版,意味着下个通用的版本将从8直接到11,毕竟11包含了9和10的所有新特 ...
- JDK 5、6、7、8、9、10、11、12、13、14 新特性汇总
JDK5 新特性 自动拆装箱 Foreach 静态导入 可变参数 Var args 枚举 格式化输出 泛型 ProcessBuilder 内省 线程并发库(JUC) 监控和管理虚拟机 元数据 JDK6 ...
- JDK9-17开发常用的新特性
以下样例代码均可在样例代码中查看 jdk9新特性 新功能和库的更新 "_"为关键字,不可作为变量名 As of Java 9, '_' is a keyword, and may ...
- JDK8-JDK17中的新特性(var类型推断、模式匹配、Record、密封类)
文章目录 1. 新语法结构 1.1 Java的REPL工具: jShell命令 1.2 异常处理之try-catch资源关闭 1.3 局部变量类型推断 1.4 instanceof的模式匹配 1.5 ...
- JDK8升至JDK11 新特性整理
目录 方法新增/修改 String CharSequence Character Path Files Reader Writer InputStream OutputStream Predicate ...
- JDK11新特性解读
文章目录 一.JDK11新特性一览 二.JDK11发布计划 三.JDK11特性解读 JEP 181: Nest-Based Access Control(基于嵌套的访问控制) JEP 309: Dyn ...
- JDK10的新特性:var泛型和多个接口实现
文章目录 简介 实现多个接口 使用多个接口 使用var 总结 简介 在JDK10的新特性:本地变量类型var中我们讲到了为什么使用var和怎么使用var. 今天我们来深入的考虑一下var和泛型,多个接 ...
最新文章
- performSelector may cause a leak because its selector is unknown
- unicode and utf-8
- 56.ISE综合,在chipscope信号列表看不到
- C/C assert()函数用法总结与注意事项
- spring批量写入mysql数据库_MyBatis-spring和spring JDBC批量插入Mysql的效率比较
- 一篇文章搞定java序列化机制
- 怎么样打印cxgrid过滤后的数据
- linux 安装Paramiko模块安装和使用
- app具体介绍界面-01
- mysql innodb count 优化_MySQL · 引擎特性 · InnoDB COUNT(*) 优化(?)
- 使用selenium爬取东航余票
- Axure 基础控件(1-49)
- 【金融市场基础知识】——中国的金融体系(二)
- 西安交大计算机研究生拟录取,西安交通大学2018硕士研究生拟录取名单公示
- odoo14 | 模块权限在清单加载顺序异常致group_id丢失bug解析
- 【看论文】之《基于YIQ彩色模型的成熟番茄图像分割识别_王新忠》
- Xcode8控制台不打印NSLog
- 如何获取和发现用户需求
- 【NOIP2017提高A组集训10.25】嘟嘟噜
- 欺骗的艺术——第二部分(2)
热门文章
- The beautiful values of the palace(2019南京网络赛)
- docker ubuntu16安装
- 一款可以安利的MarkDown编辑器
- 持续集成[代码流水线管理及Jenkins和gitlab集成]-自动化部署05
- 从前端到后端的跨域攻击与防御
- 软件开发工作者的重心是什么
- Ubuntu 12.04下搭建Web服务器 (MySQL+PHP+Apache)(转)
- 常用 Dos 命令+杂项-常用的命令符+常用的公式
- 【恋上数据结构】希尔排序
- SuseLinux详解(2)——网络设置静态IP 网关 DNS的方法