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

相关推荐
颜如玉17 分钟前
🤲🏻🤲🏻🤲🏻临时重定向一定要能重定向🤲🏻🤲🏻🤲🏻
java·http·源码
程序员的世界你不懂2 小时前
【Flask】测试平台开发,新增说明书编写和展示功能 第二十三篇
java·前端·数据库
星空寻流年2 小时前
设计模式第一章(建造者模式)
java·设计模式·建造者模式
lingchen19062 小时前
MATLAB的数值计算(三)曲线拟合与插值
开发语言·matlab
gb42152872 小时前
java中将租户ID包装为JSQLParser的StringValue表达式对象,JSQLParser指的是?
java·开发语言·python
一朵梨花压海棠go2 小时前
html+js实现表格本地筛选
开发语言·javascript·html·ecmascript
曾经的三心草3 小时前
Python2-工具安装使用-anaconda-jupyter-PyCharm-Matplotlib
android·java·服务器
蒋星熠3 小时前
Flutter跨平台工程实践与原理透视:从渲染引擎到高质产物
开发语言·python·算法·flutter·设计模式·性能优化·硬件工程
Metaphor6923 小时前
Java 高效处理 Word 文档:查找并替换文本的全面指南
java·经验分享·word
ChinaRainbowSea3 小时前
7. LangChain4j + 记忆缓存详细说明
java·数据库·redis·后端·缓存·langchain·ai编程