1.throw和throws的区别
在Java中throw和throws都是用来捕获异常的两个关键字。
首先,它们在使用的位置上不同,throw出现在代码块,throw关键字允许程序员根据自己的代码逻辑去抛出异常对象或者一些自定义的异常对象,而throws关键字出现在函数头,throws后面跟的是异常类型,方法内部如果出现了多个异常,throws后面必须跟多个异常类型,之间用逗号隔开
其次就是异常的出现这方面的不同,throw关键字是根据代码逻辑去预判一些异常的出现并主动去抛出这些异常,也就是说如果执行了throw就表示代码中就一定出现了这些异常,而throws关键字只是表示了这种异常出现的可能性,代码中不一定会出现这种异常
最终就是throw和throws都是一种消极的处理异常的方式,因为throw和throws是抛出异常或者可能抛出异常,都是交给方法的调用者去处理异常的
2.finally中的语句一定执行吗?
首先,使用finally关键字是为了保证程序正常或者异常退出时,实现对一些必要资源的回收,因为finally的执行时机是在方法返回之前,如果出现一些类似于死循环等等的情况,就会导致finally中的语句无法执行。
第一个情况就是try代码快中出现了死循环或者死锁的情况,就会导致程序阻塞在死循环或者死锁的那个地方,从而导致finally中的语句无法执行
第二个情况就是如果在try代码快中调用的System.exit()方法,正常情况下,当try或者catch执行完毕之后,JVM会继续执行finally代码快,但是调用的System.exit()方法之后,就会强制终止JVM,这样就会导致finally中的语句无法执行
第三个情况就是关于守护线程的情况,我们知道非守护线程会阻止JVM的退出,而对于守护线程来说,如果非守护线程结束了,即使守护线程还没有运行完毕,由于非守护线程结束,所有的守护线程都会被强制借宿,此时如果try-catch-finally代码快中处于这些守护线程中,自然而然finally代码块的语句就不会执行了
以上就是我们想的到的关于finally中语句无法执行的一些情况了
3.Error和Exception有什么区别
Error和Exception都是Throwable的子类
Error指的是JVM无法解决的严重问题,这些问题通常是程序无法处理或恢复的,比如栈溢出和内存耗尽
Exception是指程序运行时可能出现的可处理的一些异常情况,这些异常情况可以通过完善代码的逻辑来解决