在此次JDK15中,共更新了14个特性,下面对其中的六个主要的新特性做介绍。JDK15官方说明
主要六大特性
一.密封类sealed classes:
概念:用于限制类的使用,密封的类和接口限制其他可能继承实现他们的类或接口。
用法:通过在类class添加关键字sealed实现,声明此类为密封类。接着在类名后添加关键字permits,声明该类可以被继承的子类,如下Animal类或Dog类。
子类继承父类封装的密封类sealed,必须要使用关键字final,sealed,或non-sealed进行修饰,做二次声明。
- 当使用final修饰时,与之前JDK版本所声明相同,不可再被继承,如下Cat,SmallDog,LargeDog类。
- 当使用sealed,如上所说继续作为父类限制子类继承,如下Dog类。
- 当使用non-sealed,该类不再做密封限制,如下Tiger类与子类BaliTiger。
public sealed class Animal permits Cat,Dog,Tiger{
}
final class Cat extends Animal{
}
sealed class Dog extends Animal permits SmallDog,LargeDog{
}
final class SmallDog extends Dog{
}
final class LargeDog extends Dog{
}
non-sealed class Tiger extends Animal{
}
class BaliTiger extends Tiger{
}
二.隐藏类hidden classes:
概念:hidden classes是不能直接被其他class的二进制代码使用的class,hidden classes主要被一些框架用来生成运行时类,但是这些类不是被用来直接使用的,而是通过反射机制来调用。
- 隐藏类天生为框架设计的,在运行时生成内部的class。
- 隐藏类只能通过反射访问,不能直接被其他类的字节码访问。
- 隐藏类可以独立与其他类加载,卸载,这磕头减少框架的内存占用。
如JDK8中的lamda表达式。JVM并不会在编译时将lamda表达式转换成专门的类,而是在运算时将相应的字节码动态生成相应的类对象。
LambdaTest类
public class LambdaTest {
public static void main(String[] args) {
Runnable r = ()->{
System.out.println("Test"