第18章_JDK8-17新特性(下)
6.新语法结构
6.1 Java的REPL工具:jShell命令
17
6.2异常处理之try-catch资源关闭
9
6.3局部变量类型推断
10 var
6.4 instanceof的模式匹配
16
if(obj instanceof String str){
6.5 switch表达式
14
int result = switch (day) {
case MONDAY ->1;
case TUESDAY,WEDNESDAY,THURSDAY ->2;case FRIDAY ->3;
case SATURDAY,SUNDAY ->4;
default -> throw new RuntimeException("what day is today?" + day);;I
system. out.println(result);
JDK12中的写法:还可以使用变量接收switch表达式的结果。
举例1:(在default中返回值5)
JDK13中的写法:引入了yield关键字,用于返回指定的数据,结束switch结构。
这意味着,switch表达式(返回值)应该使用yield,switch语句(不返回值)应该使用break。
和return的区别在于:return会直接跳出当前方法,而yield只会跳出当前switch块。
int result = switch (day) {
case MONDAY -> {
yield 1;
6.5文本块
15
String info = """
<html>
<body>
<p>HellT
尚硅谷</p>
</body>
</html>" " ";
system.out.println(info);
JDK14新特性:
:取消换行操作
\s∶表示一个空格
6.7 Record
16
public record Order1(int orderId , String orderName) {}
//-还可以在record声明的类中定义静态字段、静态方法、构造器或实例方法。
static String info ="我是一个人";
//-不能在record声明的类中定义实例字段;类不能声明为abstract;不能声明显式的父类等
6.8密封类
17
/ /Person是一个密封类,可以被指定的子类所继承。非指定的类不能继承Person类
public sealed class Person permits Student,Teacher ,Worker
//要求指定的子类必须是final.sealed. non-sealed三者之一1 usage
final class Student extends Person{}//Student类不能被继承了。
sealed class Teacher extends Person permits SeniorTeacher{}//Teacher类只能被指定的子类继承
non-sealed class Worker extends Person{}//Worker类在继承时,没有任何限制
7.API的变化
7.1 Optional类
JDK8的新特性
1.为什么需要Optional类?
为了避免代码中出现空指针异常。
2.如何实例化?
static
public void test1(){
String star="qqqqq";
star=null;
//使用Optional避免空指针的问题
// 1.实例化:
//ofNullable(T value)`:用来创建一个Optional实例,value可能是空,也可能非空
Optional<String> star1 = Optional.ofNullable(star);
//orElse(T other):如果Optional实例内部的value属性不为null,则返回value。如果value为null,
// 则返回other.
String otherStar="aaaaa";
String finalStar = star1.orElse(otherStar);
System.out.println(finalStar);
//get():取出内部的value值。
}
2.JDK8:lambda表达式
2.1什么情况下可以使用lambda表达式
- 在给函数式接口提供实例时,都可以考虑使用lambda表达式。
- 基本语法的使用(重要)
2.2函数式接口
-
常见的函数式接口。Comparator \ Runnable \ java.util.function下定义的丰富的函数式接口
消费型接口:Consumer<T> void accept(T t) 供给型接口:Supplier<T> T get() 函数型接口:Function<T,R> R apply(T t) 判断型接口:Predicate<T> boolean test(T t)