Java22 异常
异常体系
到底编译时异常是什么?核心:用来提醒别的程序员(以及自己)检查某个信息
解决这个异常就能运行:
事实上,由于我们已经把time写死了,那么编译器在编译时,那么就会直接创建Date对象.这时候,就会编译时就会发生异常.
编译时异常需要程序员在编译时就处理.
整个体系:
调用栈:
异常抛出的调用栈是从下往上看的.
自己写异常:

异常的处理方式:

捕获:

比对是从上到下的,因此需要保证异常的父类在最底下:
否则,编译时就会报错.
JDK7以后新特性,同时捕获多个异常:

如果try中抛出的异常和catch中的都对不上,那么会采取虚拟机默认的方式.
常见的异常处理方式:
其中,前两者不常见.
也就是说,第二种是第一种的简短描述.
注意,printStackTrace不会终止虚拟机,只会打印.
源码:
可见,err的打印就是红色的.
out的println和err的println是在不同线程打印的,因此相互掺杂着写时,可能会乱序.
抛出异常:

这是运行时异常,因此是可以不写throws的.只是说写了throws可读性比较好.
我们经常可以在set方法里抛异常:

自定义异常:
Java源码中的异常是怎么构造的呢?

自定义异常唯一的意义就是让报错信息更加可读.因此,名字一定要起好.
当然IDEA是可以帮我们自动生成那些构造函数的:
这样使用即可:

如果父类的某个方法没有抛出异常,那么子类的这个方法也不能抛.