前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >闲谈java9到20

闲谈java9到20

作者头像
尚浩宇
发布2023-04-08 10:00:09
7450
发布2023-04-08 10:00:09
举报
文章被收录于专栏:杂烩杂烩

一、概述

    自从java9开始商用后,到现在一直停留在java8上。去年偶然看过说java17之后开始不商用了,而且springboot3和spring6最低要求JDK17,奈何太忙了一直没时间去梳理。趁现在这段时间得空,从9开始到20,逐个的去梳理下,看看有哪些变化。当然了,限于个人能力有限,本文非正式说明,只是个人见解,不可当真。

    先来个历代特性数图,心里有个大致的认知。    

二、各版本简介

2.1 JDK9

    JDK9特性数最多的原因是这个版本引入了模块化概念对JRE进行了优化,目录结构和之前有很大不同。

    还增加了一个jshell命令,实现在命令行也能快速执行java代码的功能,对于一些简单的main方法测试,但又不想建立工程来说,确实是比较方便。

    java8的时候对接口进行了改动,使接口可以编写方法体。java9对这一功能进行了升级,增加支持私有方法。

    try-resource也进行了升级,可以直接传入句柄不用再转换了。

代码语言:javascript
复制
//jaba8
try(InputStream is =new FileInputStream(file)){

}catch (Exception e){
    log.error(e);
} 
//java9
InputStream is =new FileInputStream(file)
try(is){

}catch (Exception e){
    log.error(e);
} 

    String类的底层由char数组换成了byte数据,节省了空间和提高了性能。

    另外,java9自己实现了一套httpclient不用再引用第三方实现了。

2.2 JDK10

    G1终于正名了,java10开始,G1成为默认垃圾回收器。

    增加了一个关键词:var,不同于js的var,java的var是个语法糖,依据上下文推断,推测出具体类型,实际编译时依然是原本类型。

    集合增加了copyOf方法,可以复制出一个不可变的集合出来。

2.3 JDK11

    扩大了var关键词的应用范围。

    String增加类似trim的实用方法,可以不用再用lang3包实现了。

    丰富了java9的httpclient包的方法。

    引入了一个新的垃圾回收器:Epsilon。

2.4 JDK12

    switch表达式优化1.0版,支持case多个字段

代码语言:javascript
复制
//java12以前
switch (no) {
    case 1:
    case 2:
    case 3:
        System.out.println(0);
        break;
    case 4:
        System.out.println(4);
        break;
    case 5:
    case 6:
        System.out.println(6);
        break;
    case 7:
        System.out.println(7);
        break;
}
//java12
switch (no) {
    case 1, 2, 3 -> System.out.println(0);
    case 4                -> System.out.println(4);
    case 5, 6     -> System.out.println(6);
    case 7              -> System.out.println(7);
}

    同时还支持将switvh结果赋值给对象上

代码语言:javascript
复制
int size = switch (no) {
    case 1, 2, 3 -> 6;
    case 4                -> 7;
    case 5, 6     -> 8;
    case 7              -> 9;
};

2.5 JDK一三(为啥敏感词?)

    支持了python的文本块功能,大文本字符串再也不会乱了,尤其是使用mybatis注解方式的,SQL看起来会更清晰。

代码语言:javascript
复制
"""
 a
      b
         n
"""

   switch表达式优化1.1版,其实和java12写法没啥区别。

2.6 JDK14

    switch表达式优化终版。

    增加了Record类型的类,类似VO,但只提供getter不提供setter,对于javaee来说缺少setter是不香的。

    instaceof初版优化,增加句柄,简化类型强制转换的操作,使代码看着更整洁。

代码语言:javascript
复制
if (obj instanceof String s) { 
    // can use s here 
    } else {
     // can't use s here 
}

2.7 JDK15

    增加关键词sealed,相比于final,sealed允许指定的类继承。

2.8 JDK16

    instaceof优化定版。

    增加Vector向量计算类。    

2.9 JDK17(LTS)

    注意:自本版本开始,java恢复免费了。并且java17类似java8是个长期支持的版本。

    支持苹果的M系列芯片。

    Switch支持类型推导了,不再限定数值、字符串了,同时还支持了case null。

代码语言:javascript
复制
// jdk17前
static void testFooBar(String s) {
    if (s == null) {
        System.out.println("123!");
        return;
    }
    switch (s) {
        case "1", "2" -> System.out.println("faild");
        default           -> System.out.println("Ok");
    }
}
// jdk17
static void testFooBar(String s) {
    switch (s) {
        case null         -> System.out.println("123");
        case "1", "2" -> System.out.println("faild");
        default           -> System.out.println("Ok");
    }
}

2.10 JDK18

    默认UTF-8位默认编码

    增加jwebserver命令工具,可以直接启动一个简单的web服务。

    javadoc支持新的注解,但是好像没啥用。

    重写了反射,提高了反射性能。

    switch又增强了,支持复杂的lamda表达式和类型推导。

2.11 JDK19

    引入了虚拟线程,提高并发性能。

2.12 JDK20

    java20多是对之前预览或者改进中的功能继续完善,没有更多的新功能。

3、JDK21

    java21将是继17之后的另一个LTS版本,目前规划的有5个新特性。建议还停留在1.8的可以升级到17,已升级到17的,再等几个月升级到21。总而言之,java9~20是个不断吸取他人长处弥补自己短处的过程,java在进步,我们也是时候更近一步了。

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2023-04-08,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 一、概述
  • 二、各版本简介
    • 2.1 JDK9
      • 2.2 JDK10
        • 2.3 JDK11
          • 2.4 JDK12
            • 2.5 JDK一三(为啥敏感词?)
              • 2.6 JDK14
                • 2.7 JDK15
                  • 2.8 JDK16
                    • 2.9 JDK17(LTS)
                      • 2.10 JDK18
                        • 2.11 JDK19
                          • 2.12 JDK20
                          • 3、JDK21
                          领券
                          问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档