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

相关推荐
Daniel 大东8 分钟前
BugJson因为json格式问题OOM怎么办
java·安全
Ajiang28247353041 小时前
对于C++中stack和queue的认识以及priority_queue的模拟实现
开发语言·c++
幽兰的天空1 小时前
Python 中的模式匹配:深入了解 match 语句
开发语言·python
Theodore_10224 小时前
4 设计模式原则之接口隔离原则
java·开发语言·设计模式·java-ee·接口隔离原则·javaee
冰帝海岸5 小时前
01-spring security认证笔记
java·笔记·spring
世间万物皆对象6 小时前
Spring Boot核心概念:日志管理
java·spring boot·单元测试
没书读了6 小时前
ssm框架-spring-spring声明式事务
java·数据库·spring
----云烟----6 小时前
QT中QString类的各种使用
开发语言·qt
lsx2024066 小时前
SQL SELECT 语句:基础与进阶应用
开发语言
小二·6 小时前
java基础面试题笔记(基础篇)
java·笔记·python