【Java】运算符优先级

我们先后学习了不同的运算符,通过运算符我们的能进行各种不同的操作实现自己的想要的效果,但是此时还存在一个问题,当在一个表达式中,有可能包含多个有不同运算符连接起来的、具有不同数据类型的数据对象.

由于表达式有多种运算,不同的运算顺序可能得出不同结果甚至出现错误运算,这是因为,在当表达式含有多种运算符的时候,必须要按照一定的顺序进行结合才能保证运算的正确,也就是说,各运算符之间有一定的优先级,你只要掌握了它们的优先级,就能完美的实现自己想要的结果。

优先级[由高到低] 符号 名称 结合性
1 . 从左到右
( ) 圆括号
[] 方括号
2 + 正号 从右到左
负号
++ 自增
– – 自减
~ 按位非/取补运算
逻辑非
3 * 从左到右
/
% 取余
4 + 从左到右
5 << 左移位运算符 从左到右
>> 带符号右移位运算符
>>> 无符号右移
6 < 小于 从左到右
<= 小于或等于
> 大于
>= 大于或等于
instanceof 确定某对象是否属于指定的类
7 等于 从左到右
!= 不等于
8 & 按位与 从左到右
9 | 按位或 从左到右
10 ^ 按位异或 从左到右
11 && 短路与 从左到右
12 || 短路或 从左到右
13 ? : 条件运算符 从右到左
14 = 赋值运算符 从右到左
+= 混合赋值运算符
-=
*=
/=
%=
&=
|=
^=
<<=
>>=
>>>=

从表中我们能看到,优先级顺序从高到低,也就是优先级为1的优先级最高,同级别优先级的就是从左向右结合运算,这里的结合运算指的是结合性,是指运算符结合的顺序,通常都是从左到右。从右向左的运算符最典型的就是负号,例如 3+-4,则是3加-4,因为“-”负号的优先级高于“+”加号,所以负号首先和运算符右侧的内容结合成为-4,再执行“+”加法,最后得到答案为“-1”。

4.注意区分正号负号和加减号,以及按位与和逻辑与的区别,小伙伴们如果觉得记忆起来比较麻烦,其实不需要去记忆运算符的优先级别,也不要刻意的使用运算运算符的优先级别,有一个比较好的技巧,当你不清楚优先级的地方就使用小括号去进行代替,帮你解决一切问题,一般人我不告诉他哟,示例代码如下:

int a = 1;

int b = a << 1 + 2;

int b = a <<(1+2);

【Java】小议转义字符

今天我们给小伙伴们简单的补充下转义字符相关的知识,在Java中的字母前面加上反斜线”\”来表示常见的那些不能显示的ASCII字符,我们称之为转义字符。如\0,\t,\n等,就称为转义字符。那么我们来看看下面这个例子:

假如你想在输出时显示如下带引号的信息,你能编写如下所示的这条语句吗?

System.out.println(“老九君说:”小伙伴你好!” “);

答案是肯定的:不能!因为这条语句有语法错误。编译器会认为第二个引号字符就是这个字符串的结束标志,而不知道如何处理剩余的字符。

为了解决这个问题,Java定义了一种特殊的标记来表示特殊字符,这种标记称为转义序列,转义序列由反斜杠(\)后面加上一个字符或者一些数字位组成。比如,\t是一个表示Tab字符的转义符,而诸如\u03b1的转义符用于表示一个Unicode。转义序列中的序列号作为一个整体翻译,而不是分开翻译。一个转义序列被当作一个字符。所以,就刚刚那个问题我们现在可以使用如下语句输出带引号的消息:

System.out.println(“老九君说:\” 小伙伴你好!\” “);

它的输出结果是:

老九君说:“你好小伙伴!”

所以这里的\”代表的是一个引号符号。

JAVA中常用转义字符

\ddd 三位八进制

\n 回车

\t 水平制表符

\b 空格

\r 换行

\f 换页

\’ 单引号

\” 双引号

\ 反斜杠

\? 四位十六进制

\ + 1到3位5数字;

范围’\000′~’\377′

\0:空字符

感兴趣的小伙伴可以立即在自己的电脑上测试输出试试!小伙伴们在使用时自行查阅就好!

【Java】读取Properties文件的几种方法

1.使用java.util.Properties类的load()方法

示例:

InputStream in = new BufferedInputStream(new FileInputStream(name));

Properties p = new Properties();

p.load(in);

2.使用java.util.ResourceBundle类的getBundle()方法

示例:

ResourceBundle rb = ResourceBundle.getBundle(name, Locale.getDefault());

3.使用java.util.PropertyResourceBundle类的构造函数

示例:

InputStream in = new BufferedInputStream(new FileInputStream(name));

ResourceBundle rb = new PropertyResourceBundle(in);

4.使用class变量的getResourceAsStream()方法

示例:

InputStream in = JProperties.class.getResourceAsStream(name);

Properties p = new Properties();

p.load(in);

5.使用class.getClassLoader()所得到的java.lang.ClassLoader的getResourceAsStream()方法

示例:

InputStream in = JProperties.class.getClassLoader().getResourceAsStream(name);

Properties p = new Properties();

p.load(in);

6.使用java.lang.ClassLoader类的getSystemResourceAsStream()静态方法

示例:

InputStream in = ClassLoader.getSystemResourceAsStream(name);

Properties p = new Properties();

p.load(in);

【补充】

Servlet中可以使用javax.servlet.ServletContext的getResourceAsStream()方法

示例:InputStream in = context.getResourceAsStream(path);

Properties p = new Properties();

p.load(in);

Eclipse快捷键大全

Ctrl + 1 快速修复

Ctrl + D 删除当前行

Ctrl + Alt + 复制当前行到下一行(复制增加)

Ctrl + Alt + 复制当前行到上一行(复制增加)

Alt + 当前行和下面一行交互位置

Alt + 当前行和上面一行交互位置(同上)

Alt + 前一个编辑的页面

Alt + 下一个编辑的页面(当然是针对上面那条来说了)

Alt + Enter 显示当前选择资源的属性

Shift + Enter 在当前行的下一行插入空行

Shift + Ctrl + Enter 在当前行插入空行

Ctrl + Q 定位到最后编辑的地方

Ctrl + L 定位在某行 【输入500,即快速锁定至第500行】

Ctrl + M 最大化当前的Edit或View (再按则反之)

Ctrl + / 注释当前行,再按则取消注释

Ctrl + O 快速显示 OutLine

Ctrl + T 快速显示当前类的继承结构

Ctrl + W 关闭当前Editer

Ctrl + K 参照选中的Word快速定位到下一个

Ctrl + E 快速显示当前Editer的下拉列表

Ctrl + / (小键盘) 折叠当前类中的所有代码

Ctrl + × (小键盘) 展开当前类中的所有代码

Ctrl + Shift + E 显示管理当前打开的所有的View的管理器(可以选择关闭,激活等操作)

Ctrl + J 正向增量查找

Ctrl + Shift + J 反向增量查找(和上条相同,只不过是从后往前查)

Ctrl + Shift + F4 关闭所有打开的Editer

Ctrl + Shift + X 把当前选中的文本全部变为大写

Ctrl + Shift + Y 把当前选中的文本全部变为小写

Ctrl + Shift + F 格式化当前代码

Ctrl + Shift + P 定位到对于的匹配符(譬如{}) (从前面定位后面时,光标要在匹配符里面,后面到前面,则反之)

下面的快捷键是重构里面常用的(注:一般重构的快捷键都是Alt+Shift开头的了)

Alt + Shift + R 重命名 (尤其是变量和类的重命名,很便捷)

Alt + Shift + M 抽取方法 (这是重构里面最常用的方法之一)

Alt + Shift + C 修改函数结构(比较实用,有N个函数调用了这个方法,修改一次搞定)

Alt + Shift + L 抽取本地变量

Alt + Shift + F 把Class中的local变量变为field变量

Alt + Shift + I 合并变量

Alt + Shift + V 移动函数和变量

Alt + Shift + Z 撤销重构

编辑

全局 查找并替换 Ctrl + F

全局 撤销 Ctrl + Z

全局 复制 Ctrl + C

全局 恢复上一个选择 Alt + Shift +

全局 剪切 Ctrl + X

全局 快速修正 Ctrl + 1

全局 内容辅助 Alt + /

全局 全部选中 Ctrl + A

全局 删除选中代码 Delete

全局 粘贴 Ctrl + V

全局 重做 Ctrl + Y 【即Ctrl + Z 的逆向操作】

查看

全局放大 Ctrl + = 【可以放大或缩小代码】

全局缩小 Ctrl + –

窗口

全局 激活编辑器 F12

全局 切换编辑器 Ctrl + Shift + W

全局 上一个编辑器 Ctrl + Shift + F6

全局 上一个视图 Ctrl + Shift + F7

全局 上一个透视图 Ctrl + Shift + F8

全局 下一个编辑器 Ctrl + F6

全局 下一个视图 Ctrl + F7

全局 下一个透视图 Ctrl + F8

文本编辑器 显示标尺上下文菜单 Ctrl + W

全局 显示视图菜单 Ctrl + F10

全局 显示系统菜单 Alt + –

导航

Java编辑器 打开结构 Ctrl + F3

全局 打开类型 Ctrl + Shift + T

全局 打开类型层次结构 F4

全局 打开声明 F3

全局 打开资源 Ctrl + Shift + R

全局 后退历史记录 Alt +

全局 前进历史记录 Alt +

全局 上一个 Ctrl + ,

全局 下一个 Ctrl + .

Java编辑器 显示大纲 Ctrl + O

全局 在层次结构中打开类型 Ctrl + Shift + H

全局 转至匹配的括号 Ctrl + Shift + P

全局 转至上一个编辑位置 Ctrl + Q

Java编辑器 转至上一个成员 Ctrl + Shift +

Java编辑器 转至下一个成员 Ctrl + Shift +

文本编辑器 转至行 Ctrl + L

搜索

全局 出现在文件中 Ctrl + Shift + U

全局 打开搜索对话框 Ctrl + H

全局 工作区中的声明 Ctrl + G

全局 工作区中的引用 Ctrl + Shift + G

文本编辑

文本编辑器 改写切换 Insert

文本编辑器 上滚行 Ctrl +

文本编辑器 下滚行 Ctrl +

文件

全局 保存 Ctrl + S

全局 打印 Ctrl + P

全局 关闭 Ctrl + F4

全局 全部保存 Ctrl + Shift + S 【将已修改的所有java文件保存】

全局 全部关闭 Ctrl + Shift + F4

全局 属性 Alt + Enter

全局 新建 Ctrl + N

源代码

Java编辑器 格式化 Ctrl + Shift + F

Java编辑器 注释 Ctrl + / 【PS:再次点击即取消注释】

Java编辑器 组织导入 Ctrl + Shift + O 【自动导入所需要的jar包】

【Java】char类型详解

char的初始化

char是Java中的保留字,与别的语言不同的是,char在Java中是16位的,因为Java用的是Unicode。不过8位的ASCII码包含在Unicode中,是从0~127的。

但是English,Spanish,German, French根本不需要这么表示,所以它们其实采用ASCII码会更高效。这中间就存在一个权衡问题。

因为char是16位的,采取的Unicode的编码方式,所以char就有以下的初始化方式:

//字符,可以是汉字,因为是Unicode编码

char c = ‘c’;

//可以用整数赋值

char c = 十进制数,八进制数,十六进制数等等;

//用字符的编码值来初始化

char c = ‘\u****数字’;

关于char占几个字节的问题

1.“字节”是byte,“位”是bit ;

2.1 byte = 8 bit ;

char 在Java中是2个字节。Java采用unicode,2个字节(16位)来表示一个字符。

char类型赋值

char a = ‘a’; //任意单个字符,加单引号。

char a = ‘中’;//任意单个中文字,加单引号。

char a = 111;//整数。0~65535。十进制、八进制、十六进制均可。输出字符编码表中对应的字符。

注:char只能放单个字符。

char运算

char类型是可以运算的因为char在ASCII等字符编码表中有对应的数值。

在Java中,对char类型字符运行时,直接当做ASCII表对应的整数来对待。

示例:

char m = ‘a’;

char m = ‘a’ + ‘b’;  //char类型相加,提升为int类型,输出对应的字符。

int m = ‘a’ + ‘b’;   ——结果是195。//195没有超出int范围,直接输出195。

char m = ‘a’ + b;  ——会报错。//因为b是一个赋值的变量。

char m = 197;   //输出字符编码表中对应的字符。

char m = ‘197’;   ——会报错。//因为有单引号,表示是字符,只允许放单个字符。

char m = ‘a’ + 1;  ——输出结果是b。//提升为int,计算结果98对应的字符是b。

总结

用单引号”标识,只能放单个字符。

char + char,char + int——类型均提升为int,附值char变量后,输出字符编码表中对应的字符。

JDK Version 1.0

1996 – 01 – 23 Oak(橡树)
初代版本,伟大的一个里程碑,但是是纯解释运行,使用外挂JIT,性能比较差,运行速度慢。

JDK Version 1.1

1997 – 02 – 19

  1. JDBC(Java DataBase Connectivity);
  2. 支持内部类;
  3. RMI(Remote Method Invocation) ;
  4. 反射;
  5. Java Bean;

JDK Version 1.2

1998 – 12 – 08 Playground(操场)

  1. 集合框架;
  2. JIT(Just In Time)编译器;
  3. 对打包的Java文件进行数字签名;
  4. JFC(Java Foundation Classes), 包括Swing 1.0, 拖放和Java2D类库;
  5. Java插件;
  6. JDBC中引入可滚动结果集,BLOB,CLOB,批量更新和用户自定义类型;
  7. Applet中添加声音支持

JDK Version 1.3

2000 – 05 – 08 Kestrel(红隼)

  1. Java Sound API;
  2. jar文件索引;
  3. 对Java的各个方面都做了大量优化和增强;

JDK Version 1.4

2004 – 02 – 06 Merlin(隼)

  1. XML处理;
  2. Java打印服务;
  3. Logging API;
  4. Java Web Start;
  5. JDBC 3.0 API;
  6. 断言;
  7. Preferences API;
  8. 链式异常处理;
  9. 支持IPV6;
  10. 支持正则表达式;
  11. 引入Imgae I/O API

JAVA 5

2004 – 09 – 30 Tiger(老虎)

  1. 泛型;
  2. 增强循环,可以使用迭代方式;
  3. 自动装箱与自动拆箱;
  4. 类型安全的枚举;
  5. 可变参数;
  6. 静态引入;
  7. 元数据(注解);
  8. Instrumentation;

JAVA 6

2006 – 12 – 11 Mustang(野马)

  1. 支持脚本语言;
  2. JDBC 4.0API;
  3. Java Compiler API;
  4. 可插拔注解;
  5. 增加对Native PKI(Public Key Infrastructure), Java GSS(Generic Security Service),Kerberos和LDAP(Lightweight Directory Access Protocol)支持;
  6. 继承Web Services;

JAVA 7

2011 – 07 – 28 Dolphin(海豚)

  1. switch语句块中允许以字符串作为分支条件;

  2. 在创建泛型对象时应用类型推断;

  3. 在一个语句块中捕获多种异常;

  4. 支持动态语言;

  5. 支持try-with-resources(在一个语句块中捕获多种异常);

  6. 引入Java NIO.2开发包;

  7. 数值类型可以用二进制字符串表示,并且可以在字符串表示中添加下划线;

  8. 钻石型语法(在创建泛型对象时应用类型推断);

  9. null值得自动处理;

JAVA 8

2014 – 03 – 18

  1. Lambda 表达式 − Lambda允许把函数作为一个方法的参数(函数作为参数传递进方法中。
  2. 方法引用 − 方法引用提供了非常有用的语法,可以直接引用已有Java类或对象(实例)的方法或构造器。与lambda联合使用,方法引用可以使语言的构造更紧凑简洁,减少冗余代码。
  3. 默认方法 − 默认方法就是一个在接口里面有了一个实现的方法。
  4. 新工具 − 新的编译工具,如:Nashorn引擎 jjs、 类依赖分析器jdeps。
  5. Stream API −新添加的Stream API(java.util.stream) 把真正的函数式编程风格引入到Java中。
  6. Date Time API − 加强对日期与时间的处理。
  7. Optional 类 − Optional 类已经成为 Java 8 类库的一部分,用来解决空指针异常。
  8. Nashorn, JavaScript 引擎 − Java 8提供了一个新的Nashorn javascript引擎,它允许我们在JVM上运行特定的javascript应用。

JAVA 9

2017 – 09 – 22

  1. 模块系统:模块是一个包的容器,Java 9 最大的变化之一是引入了模块系统(Jigsaw 项目)。
  2. REPL (JShell):交互式编程环境。
  3. HTTP 2 客户端:HTTP/2标准是HTTP协议的最新版本,新的 HTTPClient API 支持 WebSocket 和 HTTP2 流以及服务器推送特性。
  4. 改进的 Javadoc:Javadoc 现在支持在 API 文档中的进行搜索。另外,Javadoc 的输出现在符合兼容 HTML5 标准。
  5. 多版本兼容 JAR 包:多版本兼容 JAR 功能能让你创建仅在特定版本的 Java 环境中运行库程序时选择使用的 class 版本。
  6. 集合工厂方法:List,Set 和 Map 接口中,新的静态工厂方法可以创建这些集合的不可变实例。
  7. 私有接口方法:在接口中使用private私有方法。我们可以使用 private 访问修饰符在接口中编写私有方法。
  8. 进程 API: 改进的 API 来控制和管理操作系统进程。引进 java.lang.ProcessHandle 及其嵌套接口 Info 来让开发者逃离时常因为要获取一个本地进程的 PID 而不得不使用本地代码的窘境。
  9. 改进的 Stream API:改进的 Stream API 添加了一些便利的方法,使流处理更容易,并使用收集器编写复杂的查询。
  10. 改进 try-with-resources:如果你已经有一个资源是 final 或等效于 final 变量,您可以在 try-with-resources 语句中使用该变量,而无需在 try-with-resources 语句中声明一个新变量。
  11. 改进的弃用注解 @Deprecated:注解 @Deprecated 可以标记 Java API 状态,可以表示被标记的 API 将会被移除,或者已经破坏。
  12. 改进钻石操作符(Diamond Operator) :匿名类可以使用钻石操作符(Diamond Operator)。
  13. 改进 Optional 类:java.util.Optional 添加了很多新的有用方法,Optional 可以直接转为 stream。
  14. 多分辨率图像 API:定义多分辨率图像API,开发者可以很容易的操作和展示不同分辨率的图像了。
  15. 改进的 CompletableFuture API : CompletableFuture 类的异步机制可以在 ProcessHandle.onExit 方法退出时执行操作。
  16. 轻量级的 JSON API:内置了一个轻量级的JSON API
  17. 响应式流(Reactive Streams) API: Java 9中引入了新的响应式流 API 来支持 Java 9 中的响应式编程。

JAVA 10

2018 – 03 – 21
根据官网的公开资料,共有12个重要特性,如下:

  1. JEP286,var 局部变量类型推断。
  2. JEP296,将原来用 Mercurial 管理的众多 JDK 仓库代码,合并到一个仓库中,简化开发和管理过程。
  3. JEP304,统一的垃圾回收接口。
  4. JEP307,G1 垃圾回收器的并行完整垃圾回收,实现并行性来改善最坏情况下的延迟。
  5. JEP310,应用程序类数据 (AppCDS) 共享,通过跨进程共享通用类元数据来减少内存占用空间,和减少启动时间。
  6. JEP312,ThreadLocal 握手交互。在不进入到全局 JVM 安全点 (Safepoint) 的情况下,对线程执行回调。优化可以只停止单个线程,而不是停全部线程或一个都不停。
  7. JEP313,移除 JDK 中附带的 javah 工具。可以使用 javac -h 代替。
  8. JEP314,使用附加的 Unicode 语言标记扩展。
  9. JEP317,能将堆内存占用分配给用户指定的备用内存设备。
  10. JEP317,使用 Graal 基于 Java 的编译器,可以预先把 Java 代码编译成本地代码来提升效能。
  11. JEP318,在 OpenJDK 中提供一组默认的根证书颁发机构证书。开源目前 Oracle 提供的的 Java SE 的根证书,这样 OpenJDK 对开发人员使用起来更方便。

JAVA 11

2018 – 09 – 25
翻译后的新特性有:

  1. Nest-Based访问控制
  2. 动态类文件常量
  3. 改善Aarch64 intrinsic
  4. 无操作垃圾收集器
  5. 消除Java EE和CORBA模块
  6. HTTP客户端(标准)
  7. 局部变量的语法λ参数
  8. Curve25519和Curve448关键协议
  9. Unicode 10
  10. 飞行记录器
  11. ChaCha20和Poly1305加密算法
  12. 发射一列纵队源代码程序
  13. 低开销堆分析
  14. 传输层安全性(Transport Layer Security,TLS)1.3
  15. 动作:一个可伸缩的低延迟垃圾收集器 (实验)
  16. 反对Nashorn JavaScript引擎
  17. 反对Pack200工具和API

JAVA 12

2019 – 03 – 19
作为“功能性版本”,JDK 12 总共包含 8 个新的 JEP ,分别为:

  1. Shenandoah: A Low-Pause-Time Garbage Collector (Experimental) :新增一个名为 Shenandoah 的垃圾回收器,它通过在 Java 线程运行的同时进行疏散 (evacuation) 工作来减少停顿时间。
  2. Microbenchmark Suite:新增一套微基准测试,使开发者能够基于现有的 Java Microbenchmark Harness(JMH)轻松测试 JDK 的性能,并创建新的基准测试。
  3. Switch Expressions (Preview) :对 switch 语句进行扩展,使其可以用作语句或表达式,简化日常代码。
  4. JVM Constants API :引入一个 API 来对关键类文件 (key class-file) 和运行时工件的名义描述(nominal descriptions)进行建模,特别是那些可从 常量池加载的常量。
  5. One AArch64 Port, Not Two :删除与 arm64 端口相关的所有源码,保留 32 位 ARM 移植和 64 位 aarch64 移植。
  6. Default CDS Archives :默认生成类数据共享(CDS)存档。
  7. Abortable Mixed Collections for G1 :当 G1 垃圾回收器的回收超过暂停目标,则能中止垃圾回收过程。
  8. Promptly Return Unused Committed Memory from G1 :改进 G1 垃圾回收器,以便在空闲时自动将 Java 堆内存返回给操作系统。

JAVA 13

2019 – 09 – 17

  1. Dynamic CDS Archives 对appCDS进行性了扩展,允许在Java应用执行结束时动态归档类。归档类包括包括默认的基础层CDS(class data-sharing) 存档中不存在的所有已加载的应用程序类和类库。通过此仿瓷提高了AppCDS的可用性;
  2. ZGC: Uncommit Unused Memory 对ZGC进行了增强,在以前的版本中,java GC之后并不会将系统内存释放给OS,因为每次释放都意味着重新调整jvm的内存大小,存在一定的消耗;随着软件的发展,我们发现在很多时候内存是比较昂贵的资源,所以将不用的内存释放回去给OS是非常有必要的;此功能在默认情况下已开始,但可以通过-xx:-zuncommit参数禁用;注意:如果最新内存参数设置比最大内存参数大,那么此功能将隐式禁用。
  3. Reimplement the Legacy Socket API 在这个版本中,将使用新的实现来代替java.net.socket和java.net.serversocket API的底层实现。新版本中旧的API还未删除,可以通过配置系统属性”jdk.net.useplansocketimpl”来使用他们。但默认实现是最新版本的。
  4. Switch Expressions (Preview) 扩展开关,以便它可以用作语句或表达式,并且两种形式都可以使用传统的情况…:标签(带有贯穿线)或新案例…->标签(没有掉进去),还有一个新的语句,用于从开关表达式中产生值。这些变化将简化日常编码,并为在交换机中使用模式匹配做好准备。这是jdk 13中的一个预览语言特性。
  5. Text Blocks (Preview) 向Java语言添加文本块。文本块是一个多行字符串文本,它避免了大多数转义序列的需要,自动以可预测的方式格式化字符串,并在需要时让开发人员控制格式。这是jdk 13中的一个预览语言特性。

JAVA 14

2020 – 03 – 17

  1. Pattern Matching for instanceof (Preview) instanceof 的模式匹配(预览)
  2. Packaging Tool (Incubator) 打包工具(孵化)
  3. NUMA-Aware Memory Allocation for G1 G1 的NUMA 内存分配优化
  4. JFR Event Streaming JFR事件流
  5. Non-Volatile Mapped Byte Buffers 非原子性的字节缓冲区映射
  6. Helpful NullPointerExceptions 非常有帮助的空指针异常
  7. Records (Preview) Records(预览)
  8. Switch Expressions (Standard) Switch 表达式(标准)
  9. Deprecate the Solaris and SPARC Ports 弃用 Solaris 和S PARC 端口
  10. Remove the Concurrent Mark Sweep (CMS) Garbage Collector 移除 CMS(Concurrent Mark Sweep)垃圾收集器
  11. ZGC on macOS macOS 系统上的 ZGC
  12. ZGC on Windows Windows 系统上的 ZGC
  13. Deprecate the ParallelScavenge + SerialOld GC Combination 弃用 ParallelScavenge + SerialOld GC 组合
  14. Remove the Pack200 Tools and API 移除Pack200 Tools和API
  15. Text Blocks (Second Preview) 文本块(第二个预览版)
  16. Foreign-Memory Access API (Incubator) 外部存储器API(孵化)

JAVA 15

2020 – 09 – 15

  1. Edwards-Curve Digital Signature Algorithm (EdDSA) 蒙哥马利与扭曲爱德华曲线签名算法
  2. Sealed Classes (Preview) 密封类(预览)
  3. Hidden Classes 隐藏类
  4. Remove the Nashorn JavaScript Engine 移除nasorn JavaScript引擎
  5. Reimplement the Legacy DatagramSocket API 重新实现旧的DatagramSocket API
  6. Disable and Deprecate Biased Locking 禁用和弃用偏置锁
  7. Pattern Matching for instanceof (Second Preview) 模式匹配的instanceof(第二次预览)
  8. ZGC: A Scalable Low-Latency Garbage Collector ZGC:一个可扩展的低延迟垃圾收集器
  9. Text Blocks 文本块
  10. Shenandoah: A Low-Pause-Time Garbage Collector Shenandoah:低暂停时间垃圾收集器
  11. Remove the Solaris and SPARC Ports 移除Solaris和SPARC端口
  12. Foreign-Memory Access API (Second Incubator) 外部内存访问API(第二个孵化器)
  13. Records (Second Preview) 记录(第二次预览)
  14. Deprecate RMI Activation for Removal 建议移除RMI激活

JAVA 16

2021 – 03 – 16

  1. Vector API (Incubator) 病媒API(孵化器)
  2. Enable C++14 Language Features 启用C++ 14种语言特性
  3. Migrate from Mercurial to Git 从Mercurial迁移到Git
  4. Migrate to GitHub 迁移到GitHub
  5. ZGC: Concurrent Thread-Stack Processing ZGC:并发线程堆栈处理
  6. Unix-Domain Socket Channels Unix-Domain 套接字通道
  7. Alpine Linux Port Alpine Linux端口
  8. Elastic Metaspace 弹性Metaspace
  9. Windows/AArch64 Port Windows / AArch64端口
  10. Foreign Linker API (Incubator) 国外连接器API(孵化器)
  11. Warnings for Value-Based Classes 对基于值的类的警告
  12. Packaging Tool 包装工具
  13. Foreign-Memory Access API (Third Incubator) 外存储器访问API(第三孵化器)
  14. Pattern Matching for instanceof instanceof匹配模式
  15. Records 记录
  16. Strongly Encapsulate JDK Internals by Default 默认情况下对JDK内部进行强封装
  17. Sealed Classes (Second Preview) 密封类(第二次预览)

JAVA 17

2021 – 09 – 14

  1. Restore Always-Strict Floating-Point Semantics 恢复总是严格的浮点语义
  2. Enhanced Pseudo-Random Number Generators 增强型伪随机数发生器
  3. New macOS Rendering Pipeline 新的 macOS 渲染管道
  4. macOS/AArch64 Port 将 JDK 移植到 macOS/AArch64
  5. Deprecate the Applet API for Removal 不赞成删除 Applet API
  6. Strongly Encapsulate JDK Internals 强封装 JDK 内部构件
  7. Pattern Matching for switch (Preview) 模式匹配开关(预览)
  8. Remove RMI Activation 删除 RMI 激活
  9. Sealed Classes 封闭类别
  10. Remove the Experimental AOT and JIT Compiler 删除实验 AOT 和 JIT 编译器
  11. Deprecate the Security Manager for Removal 请求删除安全管理器
  12. Foreign Function & Memory API (Incubator) 外部函数与内存 API (孵化器)
  13. Vector API (Second Incubator) 矢量 API (第二孵化器)
  14. Context-Specific Deserialization Filters 特定于上下文的反序列化过滤器