- https://javaguide.cn/java/basis/java%E5%9F%BA%E7%A1%80%E7%9F%A5%E8%AF%86%E6%80%BB%E7%BB%93/
- https://pdai.tech/
注意:
如果本文中有错误的地方,欢迎评论区指正!🍭
1.说一下try-catch-finally各个部分的作用?
-
try块: 用于捕获异常。其后可接零个或多个
catch
块,如果没有catch
块,则必须跟一个finally
块 -
catch块: 用于处理
try
捕获到的异常 -
finally 块: 无论是否捕获或处理异常,
finally
块里的语句都会被执行。当在try
块或catch
块中遇到return
语句时,finally
语句块将在方法返回之前被执行
👨💻面试官又问:finally是不是一定会被执行到?
不一定的。在在以下 3 种特殊情况下,finally
块不会被执行:
-
在
try
或finally
块中用了System.exit(int)
退出程序。但是,如果System.exit(int)
在异常语句之后,finally
还是会被执行 -
程序所在的线程死亡
-
关闭 CPU
👨💻面试官继续追问:ftry-catch-finally中那个部分可以省略?
catch可以省略。
try
只适合处理运行时异常,try+catch
适合处理运行时异常+普通异常。
也就是说,如果你只用try去处理普通异常却不加以catch处理,编译是通不过的,因为编译器硬性规定,普通异常如果选择捕获,则必须用catch显示声明以便进一步处理。而运行时异常在编译时没有如此规定,所以catch可以省略
Error类和Exception类的父类都是Throwable类。主要区别如下︰
- Error类
表示JVM 无法处理的错误,我们没办法通过 catch
来进行捕获 。例如,Java 虚拟机运行错误、虚拟机内存不够错误、类定义错误等 。这些异常发生时,Java 虚拟机(JVM)一般会选择线程终止
- Exception类
程序本身可以处理的异常,可以通过 catch
来进行捕获。Exception
又可以分为 受检查异常(必须处理) 和 不受检查异常(可以不处理)
👨💻面试官追问:受检查异常和不受检查异常有什么不同?
- 受检查异常