Java22 异常

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

自己写异常: a113c76a83148ecc53b3cf89ab8abae0_MD5 24a3c3e30e5a11333a952cdfc1a8859b_MD5

异常的处理方式: 4572dbc05761e31da24d1d90c24ea38f_MD5 01e145a89f537ad45dad8d9f5acb1a3d_MD5

捕获: 47e70006fbb8c5614b2fdad007843715_MD5 b52fbeded553a9d0ef384bf48697b6bb_MD5

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

如果try中抛出的异常和catch中的都对不上,那么会采取虚拟机默认的方式.


常见的异常处理方式: 5d08ed577df985cd5563fe2c21aff30b_MD5 a51bc9f4257529ad2890e096911c2866_MD5 其中,前两者不常见. f2bc8d8a845b034ff3c78db83cb268a4_MD5 7a7978104c12cc18e22405d4f9904287_MD5 也就是说,第二种是第一种的简短描述. dd6b66aa2e99b69b6518625fecd1d9c8_MD5 注意,printStackTrace不会终止虚拟机,只会打印.

源码: 0f93eaae7013bbd4b84e2b22bdf7a805_MD5 cde95ae4e145ee46f4b6eeae9c55ee05_MD5 可见,err的打印就是红色的.

out的println和err的println是在不同线程打印的,因此相互掺杂着写时,可能会乱序.


抛出异常: 1d73b42c88683f3833f51b816654a202_MD5 d7aeb1d6ee20f2e107902d066e6a846b_MD5

这是运行时异常,因此是可以不写throws的.只是说写了throws可读性比较好.

我们经常可以在set方法里抛异常: 6247a436be27732c5f5a146159422eb8_MD5


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

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


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