当前位置: 首页 > ops >正文

篇章三 数据结构——前置知识(三)

目录

1.JDK17 语法新增特性

1.1 yield关键字

1.2 var关键字

1.为什么使用var?

2.注意事项

1.3 异常改进

1.4 密封类

1.总结用法

1.1 sealed 修饰的类

1.2 non-sealed 修饰

1.3 permits 

1.5 接口中的私有方法

1.6 instanceof

1.7 其他


1.JDK17 语法新增特性

1.1 yield关键字

其实就是一个语法糖

        yield关键字从Java13 开始引入。用于从 case 代码块中返回值。

正常的switch语句:

String data = "one";
int result = 0; // 接收数据的返回值
switch (data) {case "one":result = 1;// 为 result 重新赋值break;case  "two":result = 2;// 为 result 重新赋值break;default:result = -1;// 为 result 重新赋值
}
System.out.println(result);

简化后的switch:

String data = "two";
int result = switch (data) {case "one" -> 1;case  "two" -> 2;default -> -1;
};
System.out.println(result);

如果不想使用 指向符 -> 可以使用 :yield 来代替:

String data = "two";
int result = switch (data) {case "one" :yield  1;case  "two" :yield  2;default :yield  -1;
};
System.out.println(result);

1.2 var关键字

从Java10开始,var被引入

var name = "zhangsan";
var age = 10;

上述代码,编译器会自动判断出name是一个String类型,age是一个int类型。

1.为什么使用var?

使用 var 可以使代码更简洁。

有时候,类型名称可能会非常长,例如泛型。

var就像似一个简化器,让你不必反复写出繁琐的类型名。

public static void main(String[] args) {Map<String, List<Map<Integer, String>>> complexMap = new HashMap<String, List<Map<Integer, String>>>();var complexMap = new HashMapMap<String, List<Map<Integer, String>>>();
}

2.注意事项

1.不能使用 var 来声明字段

2.不能使用 var 来声明方法参数

3.不能使用 var 来声明方法返回类型

4.var 声明变量必须初始化, 但是不能初始化为 null

一句话: 只能用于局部变量 还得初始化 并且不能初始化为 null

1.3 异常改进

效果:出现异常的具体方法和原因一目了然。

如果你的一行代码有多个方法或多个变量,可以快速定位问题所在。

如果是 JDK1.8 有些情况不太容易看出来。

JDK17改进后效果如下图:

1.4 密封类

密封类一般应用在类和接口中,对接口和类 的 实现和继承 进行约束。

以前主要使用关键字 final。

当这个类 被 final 修饰了,被修饰的类就变成完全封闭的状态了,所有类都没办法继承。

现在JDK17提供了一个新的关键字:sealed。

密封类可以被该关键字修饰 并且 在声明末尾用 permits 表示要开放给哪些类型。

下述代码 Animal 为密封类,然后使用 permits 关键字, 把继承权限开放给了 Dog 类。

sealed class Animal permits Dog {public String name;public int age;public void eat() {System.out.println("eat() ......");}
}non-sealed class Dog extends Animal {public void eat() {System.out.println(this.name + "正在吃狗粮......");}
}

1.总结用法

1.1 sealed 修饰的类

必须要有 子类

提示:Sealed class must have subclasses ,此时 Dog 被 sealed 修饰,那么 Dog 必须要有子类。

1.2 non-sealed 修饰

表示不限制,任何类都可以继承。

提示:此类必须被 Animal 类 允许

1.3 permits 

未被 permits 允许的类型,则没办法继承。(契合上面 1.2 的 此类必须被 Animal 类 允许

1.5 接口中的私有方法

JDK8 接口中可以有默认方法。

JDK9 接口中可以有私有方法。

1.6 instanceof

if (obj instanceof String) {String str = (String) obj;...
}

上面的 instanceof 语法 一共做了三件事

1.判断是否为 String 类型

2.如果是,转成 String 类型

3.创建一个名为 str 的临时变量

在 JDK 16 中,使用 模式匹配思想 改进了 instanceof 用法,可以做到如下优化效果:

if (obj instanceof String str) { // obj 是否为String类型,如果是创建临时变量 str
}

1.7 其他

1. ZGC-新一代垃圾回收器,G1垃圾回收器相关的内容等

2. record类的使用

3. Stream API 的部分改进

4. HttpClient 重写了, 支持 HTTP2.0

5. 支持 List.of ()、Set.of() 、Map.of()、Map.ofEntries等 工厂方法 实例化对象

......

http://www.xdnf.cn/news/8863.html

相关文章:

  • 我们是如何为 ES|QL 重建自动补全功能的
  • 常见的css布局单位
  • 深度解析C语言数据类型:从char到double的存储秘密
  • Flutter图片Image、本地图片、程程图片、圆片剪切、圆形图片
  • 小米玄戒O1架构深度解析(一):十核异构设计与缓存层次详解
  • Vue3解决路由缓存问题
  • 剑指offer11_矩阵中的路径
  • 鸿蒙OSUniApp 制作动态生成的轮播图#三方框架 #Uniapp
  • MyBatis入门:快速搭建数据库操作框架 + 增删改查(CRUD)
  • 华为云Flexus+DeepSeek征文|依托华为云生态:Dify 平台 AI Agent 开发的场景化实践
  • .gitignore 的基本用法
  • Linux:五种IO模型
  • 【MySQL】分组查询、聚合查询、联合查询
  • 第三章 第二大脑的运作机理 整理笔记
  • Ethan的日记5/25
  • 【电子通识】连接器的绝缘胶座和接触端子基础知识
  • 图片批量压缩转换格式 JPG/PNG无损画质 本地运行
  • 华为OD机试真题——启动多任务排序(2025B卷:200分)Java/python/JavaScript/C/C++/GO最佳实现
  • Javase 基础加强 —— 09 IO流第二弹
  • 05. C#入门系列【类、结构、枚举】:从青铜到王者的进阶之路
  • 什么是maven(详细介绍)
  • 并发编程艺术--AQS底层源码解析(二)
  • 在train和eval模式下性能差距的问题(本文聚焦于BatchNorm2d)
  • TensorRT----RepVGG模型推理与部署
  • 解决leensa无法连接的问题:平替教程
  • 【PhysUnits】12 加法操作(add.rs)
  • 位图与布隆过滤器
  • 历年北京邮电大学保研上机真题
  • DAY36打卡@浙大疏锦行
  • c/c++怎样编写可变参数函数.