• 欢迎访问搞代码网站,推荐使用最新版火狐浏览器和Chrome浏览器访问本网站!
  • 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏搞代码吧

关于java:Java-915-语法新特性汇总

java 搞代码 3年前 (2022-02-19) 27次浏览 已收录 0个评论
文章目录[隐藏]

环境阐明

  • OpenJdk 15
  • 开发工具 IDEA 2020.3.2

var 类型推断 | since jdk10

var 是 Java10 版本中新出的个性,用它来定义局部变量。var 不是关键字,相当于一种动静类型,编译器依据变量所赋的值来推断类型。所以必须在定义变量的时候赋初始值。

<code class="java"> @Test
 public void testJDK10VarLocalVariable(){
  var num1 = 1000;
  var num2 = 1.001;
  var str = "hello var";
  var list = new ArrayList<>();
  var map = new HashMap<>();
 }

 @Test
 public void testNoramlVariable(){
  int num1 = 1000;
  double num2 = 1.001;
  String str = "hello var";
  List list = new ArrayList<>();
  Map map = new HashMap();
 }

文本块 | since jdk13

在咱们日常的工作中,有时候须要用到一大段的字符串,这些字符串须要换行,须要排版,须要本义。在一个文本编辑器中,这当然是非常容易的事件。然而在 java 代码中,就是一个噩梦了。而新的文本块应用”””这个符号,进行拼接。

  • 简化表白多行字符串,不须要本义;
  • 加强可读性;
<code class="java"> @Test
 public void testNormalString(){
  String text = "{" + "\n"
    +"    \"username\": \"lengleng\",\n"
    +"    \"password\": \"123456\" \n"
    +"}";
  System.out.println(text);
 }

 @Test
 public void testNewJdk13TextBlock(){
  var text = """
               {
                    "username": "lengleng",
                    "password": "123456"
               }
               """;
  System.out.println(text);
 }

switch 表达式 | since jdk12

  • 如下逻辑,当咱们须要判断某天是否是工作日时候,须要大量的反复的 case 逻辑
<code class="java"> @Test
 public void testNormalSwitch() {
  int day = 2;
  switch (day) {
  case 1:
  case 2:
  case 3:
  case 4:
  case 5:
   System.out.println("workday");
  case 6:
  case 7:
   System.out.println("weekend");
  default:
   System.out.println("invalid");
  }
 }
  • jdk12 能够通过的 switch 表达式简化如上逻辑
    @Test
    public void testNewJdk12MultiSwitch() {
    var day = 2;
    switch (day) {
    case 1, 2, 3, 4, 5 -> System.out.println(“workday”);
    case 6, 7 -> System.out.println(“weekend”);
    default -> System.out.println(“invalid”);
    }
    }

汇合工厂 | since jdk9

  • 通常心愿在代码中创立一个汇合(例如,List 或 Set ),并间接用一些元素填充它。实例化汇合,几个 “add” 调用,使得代码反复。
<code class="java"> @Test
 public void testNormal(){
  List<String> fruitsTmp = new ArrayList<>();
  fruitsTmp.add("apple");
  fruitsTmp.add("banana");
  fruitsTmp.add("orange");


  Map<Integer, String> numbersTmp = new HashMap<>();
  numbersTmp.put(1, "one");
  numbersTmp.put(2, "two");
  numbersTmp.put(3, "three");
 }
  • 当初能够通过 of 办法来疾速构建汇合类型
<code class="java">@Test
 public void testNewJdk9() {
  var fruits = List.of("apple", "banana", "orange");
  var numbers = Map.of(1, "one", 2, "two", 3, "three");
 }

record 记录 | since jdk14

Records 的指标是扩大 Java 语言语法,Records 为申明类提供了一种紧凑的语法,用于创立一品种中是“字段,只是字段,除了字段什么都没有”的类。通过对类做这样的申明,编译器能够通过主动创立所有办法并让所有字段参加 hashCode()等办法。干掉 lombok 只须要通过 record 申明即可实现实体字段的 get 和结构器办法。

public record Demo(String username, String password) {

}
 @Test
 public void testJdk15Record() {
  var demo = new Demo("lengleng", "123456");
  System.out.println(demo.password());
  System.out.println(demo.username());
 }

接口公有办法 | since jdk9

Java8 带来了许多扭转,其中之一就是 default 润饰的接口办法。这些办法扭转了咱们已知的接口,当初咱们可能在接口中定义默认实现办法。如果你大量应用 default 办法在你的利用接口中,当初能够通过 JDK9 的接口公有办法来重构。

public interface PrivateInterface {

 private void printF(){
  System.out.println("lengleng");
 }

 default void getPassword(){
  printF();
  System.out.println("123456");
 }
}
 @Test
 public void testGetPassword() <mark style="color:transparent">来源gaodaimacom搞#代%码网</mark>{
  var privateInterface = new PrivateInterfaceImpl();
  privateInterface.getPassword();
 }

Sealed 类关闭 | since jdk15

可扩展性不是面向对象编程的一个重要指标吗?为什么要限度可扩展性呢?其实,面向对象编程的最佳实际之一,就是要把可扩展性的限度在能够预测和管制的范畴内,而不是有限的可扩展性。

  • 通过 sealed 定义接口或者抽象类
public sealed interface Pet permits Cat {
}
  • 调配权限的子类能够失常的实现此接口

    public final class Cat implements Pet {
    }
  • 若没有子类没有调配权限,则编译间接报错

搞代码网(gaodaima.com)提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发送到邮箱[email protected],我们会在看到邮件的第一时间内为您处理,或直接联系QQ:872152909。本网站采用BY-NC-SA协议进行授权
转载请注明原文链接:关于java:Java-915-语法新特性汇总
喜欢 (0)
[搞代码]
分享 (0)
发表我的评论
取消评论

表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址