Java-异常机制

异常

Java中所有异常都是一个类, 继承自 Exception 类。

异常分为运行时异常和编译时异常。

运行时异常继承自 RuntimeException 类, 不进行处理会中断程序运行, 如数组越界。

编译时异常在编译阶段不进行处理会无法通过编译, 如一些文件操作。

错误

错误继承自Error 类。

错误一般是JVM层面, 而不是程序逻辑层面, 如内存溢出(OutOfMemoryError)。

有些错误也可以捕获。

异常的捕获

1
2
3
4
5
6
try {

} catch(Exception e) {
e.printStackTrace();
}

异常只会被捕获一次, 就近原则。

可以用多个catch来捕获多类异常, 分别处理。 注意父类异常放在后面。

|分隔来捕获多类异常并同时处理。

1
2
3
4
5
try {

} catch(ArrayIndexOutOfBoundsException e | ArithmeticException e) {

}

finally 关键字做最后处理, 无论是否出现异常都去执行。

异常的抛出

定义方法时, 用throw 关键字抛出异常。

1
2
3
4
public int test(int a, int b) {
if(b == 0) throw new Exception("0 couldn't be devided!");
return a/b;
}

在方法后加 throws Exception 可以将异常继续向上抛出, 而不在本方法中处理。

1
2
3
4
public int test(int a, int b) throws Exception{
if(b == 0) throw new Exception("0 couldn't be devided!");
return a/b;
}

常见异常

  • ArrayIndexOutOfBoundsException
  • NullPointerException
  • ArithmeticException
  • IOException

自定义异常

继承Exception类即可。

1
2
3
4
5
public class MyException extends Exception {
public MyException(String message) {
super(message);
}
}