异常分类
Throwable 是 Java 语言中所有错误或异常的超类。下一层分为 Error 和 Exception
- Error:Error 类是指 java 运行时系统的内部错误和资源耗尽错误。应用程序不会抛出该类对象。如果出现了这样的错误,除了告知用户,剩下的就是尽力使程序安全的终止。
- Exception(RuntimeException、CheckedException):
- RuntimeException:如NullPointerException,RuntimeException 是那些可能在 Java 虚拟机正常运行期间抛出的异常的超类。 如果出现 RuntimeException,那么一定是程序员的错误。
- CheckedException:一般是外部错误,这种异常都发生在编译阶段,Java 编译器会强 制程序去捕获此类异常,即会出现要求你把这段可能出现异常的程序进行 try catch。如试图打开一个错误格式的URL

throw 和 throws 的区别?
public static void main(String[] args) {
String s = "abc";
if(s.equals("abc")) {
throw new NumberFormatException();
} else {
System.out.println(s);
}
}
int div(int a,int b) throws Exception {
return a/b;
}
- 位置不同:throws 用在函数上,后面跟的是异常类,可以跟多个;而 throw 用在函数内,后面跟的是异常对象。
- 功能不同:throws 用来声明异常,让调用者只知道该功能可能出现的问题,并不一定会发生这些异常;throw 抛出具体的问题对象,执行 throw则一定抛出了某种异常对象。执行到throw,功能就已经结束了,跳转到调用者,并将具体的问题对象抛给调用者。
final、finally、finalize 有什么区别?
- final可以修饰类、变量、方法,修饰类表示该类不能被继承、修饰方法表示该方法不能被重写、修饰变量表示该变量是一个常量不能被重新赋值。
- finally一般作用在try-catch代码块中,在处理异常的时候,通常我们将一定要执行的代码方法finally代码块中,表示不管是否出现异常,该代码块都会执行,一般用来存放一些关闭资源的代码。
- finalize是一个方法,属于Object类的一个方法,而Object类是所有类的父类,该方法一般由垃圾回收器来调用,当我们调用System的gc()方法的时候,由垃圾回收器调用finalize(),回收垃圾。
try-catch-finally 中,如果 catch 中 return 了,finally 还会执行吗?
会执行,在 return 前执行。
常见的异常类有哪些?
- ArithmeticException:当出现异常的运算条件时,抛出此异常。例如,一个整数“除以零”时,抛出此类的一个实例。
- ClassCastException:当试图将对象强制转换为不是实例的子类时,抛出该异常。
- NullPointerException:当应用程序试图访问空对象时,则抛出该异常。
- IllegalArgumentException:抛出的异常表明向方法传递了一个不合法或不正确的参数。
- IndexOutOfBoundsException:指示某排序索引(例如对数组、字符串或向量的排序)超出范围时抛出。
- FileNotFoundException:当试图打开指定路径名表示的文件失败时,抛出此异常。
- IOException:当发生某种I/O异常时,抛出此异常。此类是失败或中断的I/O操作生成的异常的通用类。
Reference:
- https://mp.weixin.qq.com/s/CHq5BcH9AtdV0emCQ5naLw