Java异常处理机制
📋 本文节选自《Java常见面试题 8000 道》,返回 查看全部章节
20、throw 和 throws 的区别?
(1)throw
作用在方法内,表示抛出具体异常,由方法体内的语句处理;
一定抛出了异常;
(2)throws
作用在方法的声明上,表示抛出异常,由调用者来进行异常处理;
可能出现异常,不一定会发生异常;
21、final、finally、finalize 有什么区别?
final可以修饰类,变量,方法,修饰的类不能被继承,修饰的变量不能重新赋值,修饰的方法不能被重写
finally用于抛异常,finally代码块内语句无论是否发生异常,都会在执行finally,常用于一些流的关闭。
finalize方法用于垃圾回收。
一般情况下不需要我们实现finalize,当对象被回收的时候需要释放一些资源,比如socket链接,在对象初始化时创建,整个生命周期内有效,那么需要实现finalize方法,关闭这个链接。
但是当调用finalize方法后,并不意味着gc会立即回收该对象,所以有可能真正调用的时候,对象又不需要回收了,然后到了真正要回收的时候,因为之前调用过一次,这次又不会调用了,产生问题。所以,不推荐使用finalize方法。
22、try-catch-finally 中,如果 catch 中 return 了,finally 还会执行吗?
![ ][nbsp 4]
23、常见的异常类有哪些?
1、 NullPointerException:空指针异常;
2、 SQLException:数据库相关的异常;
3、 IndexOutOfBoundsException:数组下角标越界异常;
4、 FileNotFoundException:打开文件失败时抛出;
5、 IOException:当发生某种IO异常时抛出;
6、 ClassCastException:当试图将对象强制转换为不是实例的子类时,抛出此异常;
7、 NoSuchMethodException:无法找到某一方法时,抛出;
8、 ArrayStoreException:试图将错误类型的对象存储到一个对象数组时抛出的异常;
9、 NumberFormatException:当试图将字符串转换成数字时,失败了,抛出;
10、 IllegalArgumentException抛出的异常表明向方法传递了一个不合法或不正确的参数;
11、 ArithmeticException当出现异常的运算条件时,抛出此异常例如,一个整数“除以零”时,抛出此类的一个实例;