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

相关推荐
钢铁男儿39 分钟前
C# 方法(栈帧)
开发语言·c#
忆源3 小时前
【Qt】之音视频编程1:QtAV的背景和安装篇
开发语言·qt·音视频
敲键盘的小夜猫3 小时前
Python核心数据类型全解析:字符串、列表、元组、字典与集合
开发语言·python
李匠20243 小时前
C++GO语言微服务之图片、短信验证码生成及存储
开发语言·c++·微服务·golang
巨龙之路6 小时前
C语言中的assert
c语言·开发语言
2301_776681657 小时前
【用「概率思维」重新理解生活】
开发语言·人工智能·自然语言处理
小马爱打代码7 小时前
Minor GC与Full GC分别在什么时候发生?
jvm
熊大如如7 小时前
Java 反射
java·开发语言
猿来入此小猿7 小时前
基于SSM实现的健身房系统功能实现十六
java·毕业设计·ssm·毕业源码·免费学习·猿来入此·健身平台
ll7788118 小时前
C++学习之路,从0到精通的征途:继承
开发语言·数据结构·c++·学习·算法