SamZhou-2019.github.io

View on GitHub

十一、错误与异常

错误

异常

Error:内部系统错误,是由JVM抛出并在Error类中描述的,一般很少发生。 Exception:异常,由程序和外部环境引起的错误,能够通过程序捕获和处理。

免检异常:RuntimeExcption,Error及其子类 大多数情况下免检异常反应程序设计中不可重获的逻辑错误。不建议捕获或声明。

必检异常:所有其他异常。 编译器会强制程序员检查并处理它们。

声明异常

每个方法都需要声明(throws)它可能抛出的==必检异常==类型。 可以声明多个异常,用逗号分开。也可以声明自定义异常。

public void readFile(String filename) throws FileNotFoundException{...}

抛出异常

程序检查到一个异常后,创建一个异常类型的对象并抛出(throw)它。

throw new FileNotFoundException();// 方法1
FileNotFoundException ex = new FileNotFoundException();throw ex;// 方法2

一个方法出现异常时,如果想让该方法的调用者处理异常,则应当创建一个异常对象并抛出该异常。 如果能在发生异常的方法中处理异常就不需要抛出异常。

捕获异常

当必须处理不可预料的错误时使用。

try{
// 正常逻辑
}
catch (/*异常*/Exception ex){
 // 可以处理一个异常
}
   catch (/*异常*/Exception2 ex2){
 // 也可以处理多个异常
}
   ...
finally {
 // 无论是否捕获异常,这部分代码都会执行
   }

如果声明了一个必检异常,如

void err() throws IOException {}

就必须在try-catch块中捕获

void p(){
  try {err();}
 catch(IOException ex) {//异常处理}
}

或者在调用它的方法中再次声明该异常

void p() throws IOException {err();}

自定义异常类

创建自定义异常类:继承Exception的子类

public class MyException extends Exception {}

返回上一页