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 ==> true jshell> 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

@Test
public void testStringTransform(){
System.out.println("hello".transform(new Function<String, Integer>() {
@Override
public Integer apply(String s) {
return s.hashCode();
}
}));
}
​```
indent
```java
@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

JDK10、JDK11、JDK12新特性的更多相关文章

  1. JDK8~JDK11的新特性

    #JDK 1.8 新特性接口中的静态方法 只能由接口自己调用 接口中的默认方法 可以不被覆盖 #JDK 1.9 新特性(可能在JDK8中被忽略了,没来得及加)接口可以定义私有方法,但是只能让自己调用, ...

  2. JDK11&12 新特性学习

  3. jdk11新特性

    JDK 11主要特性一览 jdk11即将在9月25号发布正式版.确定的新特性包括以下17个 181 嵌套类可见性控制 309 动态文件常量 315 改进 Aarch64 Intrinsics 318 ...

  4. 发布倒计时!JDK11为我们带来哪些新特性?

    今年7月底,JDK11已经进入了Rampdown Phase Two阶段,这标志着该版本所有特性已经被冻结,不会有新的JEP会加入版本中. 这一阶段将会修复P1–P2级BUG,之后,JDK11预定于今 ...

  5. 【新特性】JDK11

    随着JDK11正式发布,带来了许多新的特性.本文主要介绍JDK11的部分新特性和新的API. 一.Local Var 在Lambda表达式中,可以使用var关键字来标识变量,变量类型由编译器自行推断. ...

  6. JDK10 新特性

    关于至此,我从大一下学习,以及大二上的巩固,这应该是SE部分的最后一章节内容,介绍一下jdk10的新特性 jdk在更新10之后,出现很多新特性,根据我所观看的视频,主要提及以下几点新特性 1.新增va ...

  7. JDK12的五大重要新特性

    文章目录 JDK12的五大重要新特性 引入JVM常量API 扩展了switch语句 支持Unicode 11.0 为日本Reiwa Era提供了方形字符支持 NumberFormat增加了对以紧凑格式 ...

  8. Java5~11新特性

    Java5~11版本新特性 Java5 Java6 Java7 Java8 Java9 Java10 Java11 Java5 Java5开发代号为Tiger(老虎),于2004-09-30发行 特性 ...

  9. JDK 5 ~ 10 新特性倾情整理!

    JDK 5 ~ 10 新特性倾情整理! 最近连 JDK11都在准备发布的路上了,大家都整明白了吗?也许现在大部分人还在用6-8,8的新特性都没用熟,9刚出不久,10-11就不用说了. 为了大家对JDK ...

随机推荐

  1. 开放接口的安全验证方案(AES+RSA)

    http://wubaoguo.com/2015/08/21/%E5%BC%80%E6%94%BE%E6%8E%A5%E5%8F%A3%E7%9A%84%E5%AE%89%E5%85%A8%E9%AA ...

  2. Java+Selenium3方法篇21-webdriver处理浏览器多窗口切换

    经过前面两篇文章的铺垫,我们这篇介绍,webdriver如何处理,一个浏览器上多个窗口之间切换的问题.我们先脑补这样一个测试场景,你在页面A点击一个连接,会在新的tab窗口打开页面B,这个时候,你在页 ...

  3. hbase链接失败

    https://blog.csdn.net/u010886217/article/details/84444046

  4. 洛谷 U86564 排队形

    洛谷 U86564 排队形 题目传送门 题目背景 \(JDFZ2019\)秋季运动会开始辣!为了使强大的高一 · \(6\)班有一个更好的精神面貌,班主任\(T\)老师和体委\(LY\),\(LYB\ ...

  5. USACO Spinning Wheels

    洛谷 P2728 纺车的轮子 Spinning Wheels https://www.luogu.org/problemnew/show/P2728 JDOJ 1800: Spinning Wheel ...

  6. 关于matlab tfdata的用法

      加上'v',可以让输出的值由元胞数组改为数组直接输出:举个例子:h = tf([1 1],[1 2 5]);[num,den] = tfdata(h)可以看出输出的num和den为元胞数组的形式无 ...

  7. Spring Cloud版本 version命名说明 (Edgware)

    Spring Cloud版本 version命名说明 (Edgware)   版权声明:guofangsky 版权所有,转载不究. https://blog.csdn.net/guofangsky/a ...

  8. docker--发布docker镜像

    前戏 前面我们自己做了个docker镜像,我们可以上传到docker hub,别人就可以下载使用了 发布到docker hub 我们前面使用docker search 查找的镜像都是从docker h ...

  9. [随笔]冲NOIP一等奖。。

    唉不想多说了. 真是一段“传奇”的经历啊. 还是那句话..“是的我上次什么都没说就走了...”这次也一样. 我还是太单纯的以为我们是肯定能够参加北大的夏令营的..然而结果真是意料之外啊. 本来我以为我 ...

  10. php和jquery生成QR Code

    php生产QR Code 下载qrcode源码,地址:https://sourceforge.net/projects/phpqrcode/files/releases/ 1.解压后引入qrlib.p ...