1. finally 块中的代码什么时候被执行?
finally的代码无论如何都会被执行。
return语句是最后一步,做完就会结束,所以finally语句实在return之前执行的
2. finally 是不是一定会被执行到?
不一定
1,当程序进入try块中出现异常,结束代码就不会执行finally
2,当程序再try块中强制退出时也不会去执行finally中代码(exit)
3. try-catch-finally 中,如果 catch 中 return 了,finally 还会执行吗?
会
4. try-catch-finally 中那个部分可以省略?
catch 和 finally 语句块可以省略其中一个。
5. Error 和 Exception 的区别?
都是继承于Throwable类
error是Java程序中不可以预料的异常情况,会导致jvm不可处理或者不可恢复的情况。
exception是可以预料的异常情况,可以获取到这种异常,并且对异常进行处理
6. 运行时异常与受检异常有何异同?
运行时异常时程序再执行过程中遇到的异常情况属于是程序错误,可以再开发或者测试时避免。
受检异常是指在程序执行期间可能发生的异常情况,需要在编写代码时进行处理,否则编译不通过。
最大的不同就是在于处理异常的方式,受检异常需要进行显式的处理,而运行时异常不需要,受检异常也可以再代码层面上预测,从而再编写代码是比卖你出现异常的情况,而运行时异常是可以避免的。
7. throw 和 throws 的区别?
throw关键字用于程序中显示的抛出一个异常对象,通常用于再方法内部抛出一个异常。
throws关键字用于声明可能抛出的某类异常,通常用于在方法签名中声明方法可能会抛出的异常。
8. 常见的异常类有哪些?
NullPointerException:当应用程序试图访问空对象时,则抛出该异常
SQLException:提供关于数据库访问错误或其他错误信息的异常。
NumberFormatException:当应用程序试图将字符串转换成一种数值类型,但该字符串不能转换为适当格式时,抛出该异常。
IOException:当发生某种I/O异常时,抛出此异常。此类是失败或中断的I/O操作生成的异常的通用类。
FileNotFoundException:当试图打开指定路径名表示的文件失败时,抛出此异常。
9. 主线程可以捕获到子线程的异常吗?
如果不做特殊处理,是不可以的。
需要使用ExecutorService。