java 新功能_Java 14的新功能

本文介绍了Java 14的主要新特性,包括开关表达式的箭头运算符和yield关键字,以及引入的文本块功能,提高了代码的可读性和简洁性。Java 14还增强了instanceof操作符,支持模式匹配,并引入了预览功能——记录,减少了样板代码。此外,更有用的NullPointerException异常信息帮助开发者更好地调试问题。
摘要由CSDN通过智能技术生成

java 新功能

2020年3月17日,Oracle发布了名为Java 14的Java新版本,其中包括许多新功能,工具,安全性,调试和更新的文档方面的改进。 但是,Oracle还向您提供Java的较旧版本,因为它具有向后兼容性,因此您以前的代码仍可以在较旧的版本上运行,并且Java 14的语法与Java 8或9并不完全不同,这只是新版本对前一个进行了一些改进。

尽管许多开发人员会花很长时间来更新其Java SE或JDK,但始终建议您及时更新您的工具。 但是,新的更新不会为初学者带来太多的事情,但是更新始终会对大型项目产生影响,大型项目包括具有数千行代码的太多Java文件。

1.下载Java 14

您可以访问Java的官方网站下载Java JDK 14,也可以单击此链接; 这也将带您到下载页面。

您也可以下载任何Java IDE来编写新版本Java的代码。 所有流行的更新Java IDE(例如IntelliJ IDE和Eclipse)都支持Java 14。

2. Java 14的新增功能?

Java 14文档正式解决了超过15种新的增强或更改,其中包括Java语言支持和JDK的最新API。

2.1开关表达式(JEP 361)

但是,经典的C ++或类似C的Switch语句已经在Java中使用,带有一些新功能和选项的新switch表达式在Java 12和13中作为预览引入,但是现在我们可以说它是Java 14中的标准。

让我们看一个例子,我们如何在Java 12之前使用Switch语句

tags.switch (day) {
 case 1:
   System.out.println("Let's meet!");
   break;
 case 2:
   break;
 case 3:
   System.out.println("Let's meet!"); 
   break;
 case 4:
   break;
 case 5:
   System.out.println("Let's meet!");
   break;
 case 6: 
   break;
 case 7:
   System.out.println("It's Sunday we cannot meet today");
   break;
  }

Old Switch语句的这种语法存在以下问题:

  • 在这里,对于Case 1, Case 3,Case 5,我们具有相同的行为Case 5,但是我们必须为每个case定义一个特定的case ,这意味着Java switch语句无法提供一种紧凑的方式来编写类似的行为。
  • 对于每个switch case语句,我们必须放置break语句; 如果我们不这样做,那么代码将失败。

2.2 Java 14开关表达式箭头运算符

在Java 14中,我们为Switch语句提供了一种新的语法,称为Switch Expression,在这里,我们获得了一个新的运算符Arrow -> ,它有助于消除break语句,并为switch Expression提供了简洁明了的外观。

Arrow运算符的语法:

case identifier -> statement;

要么

case identifier -> {// statement block ;}

Java 14的开关表达式(箭头运算符)

让我们用新的Java 14 Switch Expression重写上面的Switch语句:

switch (day) {
 case 1, 3, 5 -> System.out.println("Let's meet!");
 case 2, 4, 6 -> {
       // Do nothing
 }
 case 7 -> System.out.println("It’s Sunday we cannot meet today");
 default -> "Not valid";
 }

在这里您可以看到,借助Java 14箭头运算符,我们消除了break语句,并且在此处使用单行,针对不同情况传递了类似的行为。

2.3 Java 14开关表达式yield运算符

在Java 14中,switch语句具有一个称为yield的关键字,该关键字用作case语句表达式的return关键字,而switch语句的此功能使其成为Java 14中的switch表达式:

产生语法:

case -> {yield value;}

Java 14的开关表达式(yield语句):

String message = switch (day) {
 case 1, 3, 5 -> "Let's meet!";
 case 2, 4, 6 -> {
   yield "No meeting today";
 }
 case 7 -> {
   yield "It's Sunday we cannot meet today"; }
 default -> "Not valid";
};

在这里, switch语句将产生一个值,并且该值将存储在message. 我们应该始终覆盖switch语句的可能值,为此,switch表达式应始终具有覆盖非法情况的default语句。

2.4文字区块(JEP,368):

它是Java 14中的一项新功能。 但是,它的预览已经在Java 13中引入。在Java的旧版本中,当我们有一个长字符串,并且想要在字符串之间放置换行符时,我们必须使用“ \n ”换行符转义,并且写一个长字符串也不好看。 Java 14提供了另一种在紧凑型内核的多行中编写字符串的方法。

带有字符串的Java旧版本:

String old_java = " This is first line\n" + "This is second line" + "and this is third line\n";

Java 14文本块:

要在Java中编写长的多行字符串,我们使用Text块,这里的字符串以3个双反引号""" """驻留。

例:

String new_java = """
     This is the first line
     This is Second Line
     and this is the third line
     """;

在这里,您在字符之间输入的每个空格和换行符也将显示在输出中。

2.5例如Java 14模式匹配(JEP 305)

Java的较早版本中已经存在instanceof语句,但是Java 14提供了一种技术,我们可以使用单行而不是多行将字符串对象类型转换为另一个字符串变量。

使用instanceof进行类型转换的Java旧版本:

Object object_string = "It is a string, but is treated as an object...";
    if (object_string instanceof String)
{
    String stringObject = (String) object_string;
    System.out.println(stringObject.length());
}

Java 14

Object object_string = "It is a string but it treated as an object...";
    if (object_string instanceof String stringObject)
{
    System.out.println(stringObject.length())
}

现在,我们无需为类型转换显式编写额外的语句; Java 14中instanceof语句的增强可以在一行内同时键入新变量的收敛。

2.6记录(JEP,359):

在Java 14中,这是一种预览模式,我们可以期望在Java 15中使用完整的标准格式。假设我们想创建某种方式来表示Student详细信息,为此,我们可以使用一些数据变量来创建Student类,例如Name, age,grades.

class Student 
{
  public final String name, grades;
  public final int age;
}

但是这里我们不需要getter和setter。 相反,我们将创建一个构造函数。 创建构造函数是一个好习惯,在它的帮助下,我们还可以判断两个Student对象是否引用同一个Student。

class Student {
   public final String name, grades;
      public final int age;
           public Student(String name, int age, String grades)
                  {
                          this.name = name;
                          this.age = age;
                          this.grades = grades;
                  }
   @Override
   public boolean equals(Object o) 
    {
    if (this == o) return true;
    if (o == null || getClass() != o.getClass()) return false;
    Student student = (Student) o;
    return Objects.equal(student.name, name) == 0 &&
        Objects.equal(student.grades, grades) == 0 &&
        Integer.compare(age, student.age);
    }
   @Override
       public int hashCode() 
  {
    return Objects.hash(name, age, grades);
   }
   @Override
   public String toString() 
   {
    return "Student{" +
        "name=" + latitude +
        ", age" + longitude +
        ", grades='" + grades + '\'' +
        '}';
 }

在上面的代码中,我们的重点是学生的name, age,grades,但我们已覆盖了构造函数,哈希码,equals和toString之类的方法,但是Java 14提供了可以解析的预览功能record这种样板。

record Student(String name, int age, String grades){}

在这里,构造函数,哈希码,equals和toString将由编译器生成,您可以节省很多不必要的代码重写。

2.7有用的NullPointer异常(JEP 358)

它是Java 14中已添加的一项新功能。Java虚拟机引发一个异常,称为NullPointerException(NPE),当代码尝试取消引用空引用时,会发生此异常,并且该异常是其中之一。 Java中最常见的异常。

obj.sec_obj.val = 10;

例外:

Exception in thread "main" java.lang.NullPointerException
    at Npe.main(Npe.java:17)

该示例是在较旧版本的Java上编译的,在这里您可以看到错误消息未提供引用为null的任何特定信息,它可以是objobj.sec_obj

但是Java 14解决了这个问题,并提供了更好的错误消息来调试此语句。

tags.obj.sec_obj.val = 10;

输出:

Exception in thread "main" java.lang.NullPointerException:
       Cannot read field "val" because "obj.sec_obj" is null
    at Npe.main(Npe.java:17)

现在有了新的异常信息,我们可以直接访问代码的sec_obj部分并调试问题。

3.结论

这是Java 14的一些重要新功能,如果您是Java开发人员,则可以在军械库中添加这些功能,其中一些功能已在Java 14中进行了预览,并且某些功能已正确实现。 Java开发人员社区仍在进行升级,下一个更新中还有许多其他更改。 除了这些功能之外,Java 14还引入了许多其他新功能。建议您转到官方文档。 Java JEP并阅读所有官方更新。

4.下载源代码

下载
您可以在此处下载本文的完整源代码: Java 14功能

翻译自: https://www.javacodegeeks.com/java-14-new-features.html

java 新功能

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值