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 的新特性详细总结与代码示例

相关推荐
Wx120不知道取啥名20 分钟前
C语言之长整型有符号数与短整型有符号数转换
c语言·开发语言·单片机·mcu·算法·1024程序员节
开心工作室_kaic1 小时前
ssm010基于ssm的新能源汽车在线租赁管理系统(论文+源码)_kaic
java·前端·spring boot·后端·汽车
Python私教1 小时前
Flutter颜色和主题
开发语言·javascript·flutter
代码吐槽菌1 小时前
基于SSM的汽车客运站管理系统【附源码】
java·开发语言·数据库·spring boot·后端·汽车
Ws_1 小时前
蓝桥杯 python day01 第一题
开发语言·python·蓝桥杯
zdkdchao1 小时前
jdk,openjdk,oraclejdk
java·开发语言
神雕大侠mu2 小时前
函数式接口与回调函数实践
开发语言·python
精致先生2 小时前
问题记录01
java·数据库·mybatis
Y.O.U..2 小时前
STL学习-容器适配器
开发语言·c++·学习·stl·1024程序员节
小魏冬琅2 小时前
探索面向对象的高级特性与设计模式(2/5)
java·开发语言