JDK9——JDK13新特性总结

JDK9------JDK13新特性


JDK 9 新特性:接口增强与 Try-With-Resources 改进

1. 接口增强

旧版本:

在 JDK 8 中,接口可以有默认方法和静态方法,但无法在接口中添加私有方法,导致代码复用性差,公共逻辑只能放在默认或静态方法中。

新版本:

JDK 9 引入了接口的私有方法,允许在接口内部定义一些辅助的逻辑或工具方法。私有方法只能在接口内使用,不能被实现类或外部调用。

代码对比:

JDK 8 示例:

java 复制代码
public interface MyInterface {
    default void showMessage() {
        System.out.println("Showing message");
        log("Message shown");
    }

    static void showStaticMessage() {
        System.out.println("Static message");
    }

    default void log(String message) {
        System.out.println("Logging: " + message);
    }
}

public class MyClass implements MyInterface {
    public static void main(String[] args) {
        MyClass obj = new MyClass();
        obj.showMessage();  // 输出 "Showing message" 和 "Logging: Message shown"
        MyInterface.showStaticMessage();  // 输出 "Static message"
    }
}

JDK 9 示例:

java 复制代码
public interface MyInterface {
    default void showMessage() {
        System.out.println("Showing message");
        log("Message shown");
    }

    static void showStaticMessage() {
        System.out.println("Static message");
    }

    // 私有方法,封装公共逻辑
    private void log(String message) {
        System.out.println("Logging: " + message);
    }
}

public class MyClass implements MyInterface {
    public static void main(String[] args) {
        MyClass obj = new MyClass();
        obj.showMessage();  // 输出 "Showing message" 和 "Logging: Message shown"
        MyInterface.showStaticMessage();  // 输出 "Static message"
    }
}

总结:

  • JDK 8:没有私有方法,只能在默认方法中定义公共逻辑,暴露给实现类。
  • JDK 9:新增私有方法,在接口内部复用逻辑,增强封装性。

2. Try-With-Resources 改进

旧版本:

在 JDK 7 中,try-with-resources 语法要求在 try 语句中显式声明资源,否则无法自动关闭资源。

java 复制代码
try (BufferedReader br = new BufferedReader(new FileReader("file.txt"))) {
    // 使用资源
} catch (IOException e) {
    e.printStackTrace();
}

新版本:

JDK 9 允许你在 try 语句中使用已经声明的资源,只要资源是 AutoCloseable 类型即可。

java 复制代码
BufferedReader br = new BufferedReader(new FileReader("file.txt"));
try (br) {
    // 使用资源
} catch (IOException e) {
    e.printStackTrace();
}

总结:

  • JDK 7 :资源必须在 try 内部声明。
  • JDK 9 :可以在外部声明资源并在 try 语句中使用,减少重复声明。

JDK 10 新特性:局部变量类型推断

局部变量类型推断

旧版本:

在 JDK 10 之前,必须显式声明局部变量类型,导致代码冗长。

java 复制代码
int number = 10;
String text = "Hello, World";

新版本:

JDK 10 引入了 var 关键字,编译器可以根据赋值内容自动推断变量类型。

java 复制代码
var number = 10;  // 自动推断为 int
var text = "Hello, World";  // 自动推断为 String

代码对比:

JDK 8 示例:

java 复制代码
int number = 10;
String text = "Hello, World";

JDK 10 示例:

java 复制代码
var number = 10;  // 自动推断为 int
var text = "Hello, World";  // 自动推断为 String

总结:

  • 旧版:必须显式声明局部变量的类型。
  • 新版 :使用 var 进行局部变量类型推断,减少代码冗余。

JDK 12 新特性:Switch 表达式

Switch 表达式

旧版本:

传统的 switch 语句要求在每个 case 语句中添加 break,并且无法直接返回值,代码显得冗长。

java 复制代码
int day = 2;
String result;
switch (day) {
    case 1:
        result = "Monday";
        break;
    case 2:
        result = "Tuesday";
        break;
    default:
        result = "Invalid day";
}

新版本:

JDK 12 引入了 switch 表达式,可以作为表达式直接返回值,并使用箭头语法,简化了代码。

java 复制代码
int day = 2;
String result = switch (day) {
    case 1 -> "Monday";
    case 2 -> "Tuesday";
    default -> "Invalid day";
};

代码对比:

JDK 8 示例:

java 复制代码
int day = 2;
String result;
switch (day) {
    case 1:
        result = "Monday";
        break;
    case 2:
        result = "Tuesday";
        break;
    default:
        result = "Invalid day";
}

JDK 12 示例:

java 复制代码
int day = 2;
String result = switch (day) {
    case 1 -> "Monday";
    case 2 -> "Tuesday";
    default -> "Invalid day";
};

总结:

  • 旧版 :需要 break 语句和不能直接返回值。
  • 新版switch 可以作为表达式返回值,使用箭头简化了语法。

JDK 13 新特性:文本块

文本块

旧版本:

处理多行字符串时需要拼接和手动转义换行符,代码不直观。

java 复制代码
String text = "This is a line.\n" +
              "This is another line.";

新版本:

JDK 13 引入了文本块(Text Block),使用 """ 定义多行字符串,自动处理换行符和转义字符,使代码更清晰。

java 复制代码
String text = """
              This is a line.
              This is another line.
              """;

代码对比:

JDK 8 示例:

java 复制代码
String text = "This is a line.\n" +
              "This is another line.";

JDK 13 示例:

java 复制代码
String text = """
              This is a line.
              This is another line.
              """;

总结:

  • 旧版:多行字符串需要手动转义换行符,代码冗长。
  • 新版:文本块简化了多行字符串的书写,提升了代码的可读性。

以上就是 JDK 9、10、12 和 13 的新特性详细总结与代码示例

相关推荐
_oP_i32 分钟前
Pinpoint 是一个开源的分布式追踪系统
java·分布式·开源
mmsx35 分钟前
android sqlite 数据库简单封装示例(java)
android·java·数据库
bryant_meng38 分钟前
【python】OpenCV—Image Moments
开发语言·python·opencv·moments·图片矩
武子康1 小时前
大数据-258 离线数仓 - Griffin架构 配置安装 Livy 架构设计 解压配置 Hadoop Hive
java·大数据·数据仓库·hive·hadoop·架构
若亦_Royi1 小时前
C++ 的大括号的用法合集
开发语言·c++
资源补给站2 小时前
大恒相机开发(2)—Python软触发调用采集图像
开发语言·python·数码相机
豪宇刘2 小时前
MyBatis的面试题以及详细解答二
java·servlet·tomcat
秋恬意2 小时前
Mybatis能执行一对一、一对多的关联查询吗?都有哪些实现方式,以及它们之间的区别
java·数据库·mybatis
m0_748247552 小时前
Web 应用项目开发全流程解析与实战经验分享
开发语言·前端·php
6.943 小时前
Scala学习记录 递归调用 练习
开发语言·学习·scala