从Java8到Java17新特性

本文介绍了Java10至17版本中的关键新特性,包括局部变量类型的自动推断、switch表达式的简化、文本块的改进、Records类的便捷、模式匹配instanceof的引入、密封类的控制以及处理NullPointerExceptions的改进。
摘要由CSDN通过智能技术生成

1. 局部变量类型推断

        它允许你在不指定类型的情况下声明局部变量。类型是从表达式的右侧推断出来的。此功能也称为var类型。

将前端思想 var 关键字引入 java 后段,自动检测所属于类型,一种情况除外,不能为 null,因为不能判断具体类型,会报异常。

/**

* 局部变量var

*/

public static void jdk10Var() {

    var number = 10;

    var str    = "小飞博客";

    var list   = new ArrayList<>(1);

    var map    = new HashMap<>(1);

    var set    = new HashSet<>(1);

}

2.switch表达式

        在 Java 14 中使用 switch 表达式时,你不必使用关键字break来跳出 switch 语句或return在每个 switch case 上使用关键字来返回值;相反,你可以返回整个 switch 表达式。这种增强的 switch 表达式使整体代码看起来更清晰,更易于阅读。

/**

* Switch优化

*/

public static void jdk13Switch() {

    int k = 2;

    String result = switch (k) {

    case  1 -> "one";

    case  2 -> "two";

    default -> "many";

    };

    System.out.println(result);

}

3.文本块

        文本块是 Java 15 中添加的一项新功能。它允许你在不使用转义序列的情况下创建多行字符串。这在你创建 SQL 查询或 JSON 字符串时非常有用。在下面的示例中,你可以看到使用文本块时代码看起来更加简洁。

/**

* 文本块升级

*/

public static void jdk13Text() {

    // jdk13之前

    String html1 = "<html>\n" +

    "    <body>\n" +

    "        <p>Hello, world</p>\n" +

    "    </body>\n" +

    "</html>\n";

    // jdk13之后

    String html2 = """

    <html>

    <body>

    <p>Hello, world</p>

    </body>

    </html>

    """;

}

4.Records

        记录Records是添加到 Java 14 的一项新功能。它允许你创建用于存储数据的类。它类似于 POJO 类,但代码少得多;大多数开发人员使用 Lombok 生成 POJO 类,但是有了记录,你就不需要使用任何第三方库。在下面的示例中,你可以看到创建记录类所需的代码非常少。

        使用它可以替代构造器、equal 方法、toString 方法,hashCode 方法

public record Person(String name, int age) {}

5.模式匹配instanceof

        模式匹配instanceof是 Java 16 中添加的一项新功能。它允许你将instanceof运算符用作返回已转换对象的表达式。当你使用嵌套的 if-else 语句时,这非常有用。在下面的示例中,你可以看到我们如何使用instanceof运算符来捕获Employee对象,而不是进行显式转换。

/**

* instanceof

*/

public static void jdk12Instanceofh() {

    Object obj = "XiaoFei";

    // jdk12之前

    if (obj instanceof String) {

        String s = (String) obj;

        int length = s.length();

        System.out.println(length);

    }

    // jdk12之后

    if (obj instanceof String str) {

        int length = str.length();

        System.out.println(length);

    }

}

6. 密封类

        密封类是添加到 Java 17 中的一项新功能。它允许你将类或接口的继承限制为一组有限的子类。当你想将类或接口的继承限制为一组有限的子类时,这非常有用。在下面的示例中,你可以看到我们如何使用sealed关键字将类的继承限制为一组有限的子类。

7. 有用的 NullPointerException

        NullPointerExceptions 是 Java 14 中添加的一项新功能。它允许你获取有关NullPointerExceptions. 这在调试时非常有用NullPointerExceptions。在下面的示例中,你可以看到相同的代码如何NullPointerExceptions在 Java 8 和 Java 14 中生成不同的结果,但在 Java 14 中,你可以获得有关异常的更多信息

其他新特性:

JDK8到JDK17新特性-CSDN博客

  • 22
    点赞
  • 27
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值