JDK9~17新特性总结

JDK9

1.模块化系统

1.1弊端显露

  • 运行环境臃肿,JVM直接将全部的jar进行加载。
  • 代码库庞大,创建复杂,交叉引用依赖影响效率。
  • 没有对代码实现真正意义的封装。

1.2模块化系统的改进意义

在jar和package之间增加了一层moudule层,项目中分为相互独立的模块,运行测试时,只需要必要模块,而非全部jdk模块,可简化各种类库和大型应用的开发和维护 ,这样不仅减少了内存的开销,还提高了项目的安全性和可拓展性。

2JShell命令

出现了 像Python 语言中的交互式编程环境,开发者只需要输入一些代码,就可以在编译前获得对程序的反馈,总结就是即用即得。

3.接口私有方法

接口中方法默认为抽象方法,JDK8接口中可以有静态方法和默认方法(实现类中不实现接口方法就默认实现默认方法),JDK9接口中可以有私有方法,供接口中方法内部使用的方法

4.try语句

Java 8 中,可以实现资源的自动关闭,但是要求执行后必须关闭的所有资源必须在try子句中初始化,否则编译不通过。
Java 9 中,用资源语句编写try将更容易,我们可以在try子句中使用已经初始化过的资源,此时的资源是final的

5.String存储结果改变

JDK8及以前,用char【】来存储
JDK9以后 ,用byte【】加上编码标记,节省空间。

6.结合特性of

用创建一个只读,不可改变的集合,必须构造和分配它,然后添加元素,最后包装成一个不可修改的集合。多个步骤比较繁琐,JDK9将方法封装起来,调用就可一键完成。

7.InputStream增强

使用流传输步骤繁琐,进行了简化,出现了一个方法transferTo,可以用来将数据直接传输到 OutputStream。

8.增强的 的 Stream API

8.1takeWhile方法

用于从 Stream 中获取一部分数据,接收一个 Predicate 来进行选择。在有序的Stream 中,takeWhile 返回从开头开始的尽量多的元素

8.2dropWhile方法

与takeWhile方法互补 返回takeWhile中剩余元素

8.3ofNullable()

Java 8 中 Stream 不能完全为null,否则会报空指针异常。而 Java 9 中的 ofNullable 方法允许我们创建一个单元素 Stream,可以包含一个非空元素,也可以创建一个空Stream。

8.4iterate() 重载

这个 iterate 方法的新重载方法,可以让你提供一个 Predicate (判断条件)来指定什么时候结束迭代。

9.Optional 类中stream()使用

两个常用方法:
Optional.ofNullable(list);
optional.stream().flatMap(x->x.stream()).limit(2).forEach(System.out::println);

JDK10新特性

1.局部类型推断

用 var 接受变量, 原理根据后者推断前者。

四种情况不能推断

  • 初始值为空
  • 方法引用
  • lambda表达式
  • 为静态数组初始化

2. 新增不可变集合方法

继JDK9之后又出现了一个创建不可变集合的方法copyOf。
copyOf 方 法 会 先 判 断 来 源 集 合 是 不 是AbstractImmutableList 类型的,如果是,就直接返回,如果不是,则调用 of 创建一个新的集合。

JDK11新特性

1.增加ZGC垃圾回收器

2.Optional加强

3.新增HTTP客户端API

JDK14新特性

改进的NullPointerExceptions,jdk14以前空指针异常

JDK15新特性

jdk15提供text block 功能,解决字符串多行换行问题

//jdk15增加文本块
    String str = """
        hello
        world
        hahaha
        """;
        System.out.println(str);

JDK16新特性

switth结构用法的改变
//JDK8的用法:

//JDK8的用法:
public static void main(String[] args) {
    int level = new Random().nextInt(4);
    String strLevel;
    switch (level){
        case 1:
            strLevel = "优秀";
            break;
        case 2:
            strLevel = "良好";
            break;
        default:
            strLevel = "一般";
            break;
    }
    System.out.println(strLevel);
}

JDK9的用法:

//JDK9的用法:
public static void main(String[] args) {
    int level = new Random().nextInt(4);
    String strLevel;
    switch (level){
        case 1 -> strLevel="优秀";
        case 2 -> strLevel="良好";
        default -> strLevel="一般";
    }
    System.out.println(strLevel);
}

以及多个选项匹配的场景:

public static void main(String[] args) {
    int level = new Random().nextInt(12);
    String jiJi = null;
    switch (level){
        case 3,4,5 -> jiJi =  "春天";
        case 6,7,8 -> jiJi =  "夏天";
        case 9,10,11 -> jiJi =  "秋天";
        case 12,1,2 -> jiJi = "冬天";
    };
    System.out.println(jiJi);
}

以上就是全部内容,如果你有任何问题、意见或建议,都欢迎在评论中分享。让我们继续分享知识,共同成长,一起走向更加美好的未来。感谢你们的阅读,祝愿你们在未来的道路上一帆风顺!

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值