文章目录
- 前言
- 一 : yield关键字
- 二 :var关键字
- 三 :密封类
- 四 :空指针异常:
- 五:接口中的私有方法:
- 六:instanceof关键字
前言
这里介绍jdk17相对于jdk1.8的部分新增特性。
一 : yield关键字
yield关键字用于switch语句简写的场景,下面用代码演示,很简单:
public static void main1(String[] args) {
//yield关键字
int ret1 = 5;
switch(ret1) {
case 1:
System.out.println(1);
break;
case 2:
System.out.println(2);
break;
case 3:
System.out.println(3);
break;
default:
System.out.println(4);
break;
}
int ret2 = 5;
switch(ret2) {
//关于switch语句的简写
case 1 -> System.out.println(1);
case 2 -> System.out.println(2);
case 3 -> System.out.println(3);
default -> System.out.println(4);
}
//yield关键字用于代替->
//case后面添加: ,yield后也加上:
int ret3 = 5;
switch(ret3){
case 1: yield : System.out.println(1);
case 2 : yield : System.out.println(2);
case 3 : yield : System.out.println(3);
default : yield : System.out.println(4);
}
二 :var关键字
var关键字根据变量的值判断并代表变量的类型,这对于一些类型复杂的变量来说,提高了代码的简洁性:
public static void main(String[] args) {
//var关键字
//var关键用于通过变量值判断且代表变量的类型,这样对于类型复杂的变量可以提高代码的简洁度
//因此var关键字修饰的变量必须初始化,不能为null
var name = "zhangsan";
var age = 14;
}
注意事项:
- var不能声明成员变量
- var 不能修饰形参的类型
- var不能作为方法的返回值类型
- var修饰的变量值不能为null
三 :密封类
sealed关键字与final关键字相同,修饰的类也是密封类,但是sealed修饰的类必须有子类,而final修饰的类是最终类,没有子类
关于密封类及其子类的思维导图:
代码:
sealed class Animal{
String name ;
int age;
}
final class Dog extends Animal{
}
non-sealed class petDog extends Animal{
}
sealed class testDog extends Animal{
}
non-sealed class test2 extends testDog{
}
四 :空指针异常:
在jdk8之前,报指针异常时,不会指出具体原因,但是在jdk9之后,报空指针异常时,会指出具体的原因:
public static void main(String[] args) {
//空指针异常
String name = null;
System.out.println(name.toLowerCase());
}
五:接口中的私有方法:
在jdk8 接口中可以实现默认方法,在jdk9之后,接口中可以实现私有方法,因为接口中的私有方法不可能在外部被使用,所以接口中的私有方法是为默认方法提供帮助的。
public interface Itest {
//默认方法
default void func2(){
func1();
}
//私有方法
private void func1(){
System.out.println("hehe");
}
}
六:instanceof关键字
在之前的博客中讲述到instanceof关键字用于判断左边的变量类型是否是右边的类型所转化。
在jdk9之后将这个过程简化了:
Animal animal = (Animal) new Dog();
//简化前:如果animal类型是Dog类型所转换,则将animal类型转换成Dog类型
if(animal instanceof Dog){
Dog str = (Dog) animal;
}
//简化后:
//如果animal类型是Dog类型转换,自动创建一个Dog类型的变量str ,将animal类型转换成Dog类型,赋给str
if(animal instanceof Dog str){
System.out.println(str);
}
在jdk17中,还有一些其他的新增特性,以后用到再进行阐述。