文章目录
七、 异常
1. throw 和 throws 的区别?
throw:
- 表示方法内抛出某种异常对象
- 如果异常对象是非 RuntimeException 则需要在方法申明时加上该异常的抛出 即需要加上 throws 语句或者在方法体内 try catch 处理该异常,否则编译报错
- 执行到 throw 语句则后面的语句块不再执行
throws:
- 方法的定义上使用 throws 表示这个方法可能抛出某种异常
- 需要由方法的调用者进行异常处理
2. final、finally、finalize 有什么区别?
final 表示最终的、不可改变的。用于修饰类、方法和变量。
finally 异常处理的一部分,它只能用在try/catch语句中,表示希望finally语句块中的代码最后一定被执行(但是不一定会被执行)
finalize()是在java.lang.Object里定义的,Object的finalize方法什么都不做,对象被回收时finalized方法会被调用。
特殊情况下,可重写finalize方法,当对象被回收的时候释放一些资源。但注意,要调用super.finalize()。
3. try-catch-finally 中哪个部分可以省略?
catch 和 finally 语句块可以省略其中一个。
4. try-catch-finally 中,如果 catch 中 return 了,finally 还会执行吗?
会,不管有没有异常,只要执行到trycatch块,finally中的代码都会执行
5. 常见的异常类有哪些?
- NullPointerException - 空指针异常
- ClassCastException - 类转换异常
- IndexOutOfBoundsException - 下标越界异常
- ArithmeticException - 计算异常
- IllegalArgumentException - 非法参数异常
- NumberFormatException - 数字格式异常
- UnsupportedOperationException 操作不支持异常
- ArrayStoreException - 数据存储异常,操作数组时类型不一致
- NoSuchElementException - 元素不存在异常
- InputMismatchException - 输入类型不匹配异常
6. finally语句块一定执行吗?
答案是不一定。
- 直接返回未执行到finally语句块
- 抛出异常未执行到finally语句块
- 系统退出未执行到finally语句块