異常處理的兩種方式


1.使用throws關鍵字,聲明異常,交給方法的調用者處理,最終交個JVM處理(中斷處理)

JVM中斷處理,后面的后續代碼就不會執行了。 throws使用格式: 當一個方法拋出了異常,就在方法聲明時使用throws關鍵字,將異常交給方法調用者處理

修飾符 返回值類型 方法名(參數列表) throws AAAException, BBBException {
  //method body
}

注意:

1、如果throws的多個異常是子父類關系,那么就只用聲明父類 2、調用了聲明異常的方法,那么就必須處理這些聲明的異常,要么是繼續throws,交給別人處理,要么就try...catch自己處理

package cn.zhuobo.day12.aboutException;

import java.io.FileNotFoundException;
import java.io.IOException;

public class Demo01Throws {
  public static void main(String[] args) throws IOException {// main調用了聲明異常的方法,可以選擇繼續聲明異常,繼續拋出異常給main的調用者也就是JVM處理
      readFile("c:a.taxt");
  }
// 這是這三個異常的繼承關系:FileNotFoundException extends IOExcetion Exception,因此拋出了兩個異常就只用聲明父類異常
  public static void readFile(String fileName) throws IOException {
      if(!fileName.equals("c:a.txt")) {
          throw new FileNotFoundException("文件路徑不是c:a.txt");
      }
      if(!fileName.endsWith(".txt")) {
          throw new IOException("后綴名不是txt");
      }
      System.out.println("讀取文件");// 如果不符合拋出異常的條件,那么就執行這句話
  }
}

2.異常的第二種處理方式,捕獲異常try......catch

格式:

try {
  可能產生異常的代碼
}catch(定義一個異常的變量,用來接收try中拋出的異常對象) {
  異常的處理邏輯,接收異常對象之后怎么處理異常,一般在工作中
  會把異常記錄到一個日志中
}
...// 多個catch
catch(異常類名 變量名) {
  try可能拋出多個異常,可以使用多個catch
}finally {
          System.out.println("這里的代碼無論是否出現異常都會執行,一般用於資源回收");
          // finally代碼塊不能單獨使用,和try catch一起使用
          // 如果finally代碼塊里有return語句,那么永遠返回finally中的結果,應該避免在finally中寫return語句
}

后續代碼

注意 1、try可能回拋出多個異常對象,可以使用多個catch處理這些異常 2、try產生了異常就執行相對應的異常處理邏輯,之后繼續執行后續代碼 3、沒有產生異常就不執行catch,執行完try后,執行后續代碼

package cn.zhuobo.day12.aboutException;

import java.io.FileNotFoundException;
import java.io.IOException;

public class Demo02TryCatch {
  public static void main(String[] args) {//這里沒有throws聲明拋出異常
      try {
          // 可能產生異常的代碼
          readFile("sss");
      }catch (IOException e) {// try里拋出什么異常對象,catch就聲明什么異常變量,接收拋出的異常
          // 異常的處理邏輯
          System.out.println("后綴名不是txt");
      }
      //與throws不同的是,自己try catch處理異常,不是交個方法調用這JVM處理,就不會中斷處理,后續代碼可以繼續執行
      System.out.println("這些都是后續的代碼");
  }

  public static void readFile(String fileName) throws IOException {// 如果結尾不是txt,這個方法會產生一個異常對象
      if(!fileName.endsWith(".txt")) {
          throw new IOException("后綴名不是txt");
      }
  }
}

3.Throwable類中定義了三個異常處理方法

String getMessage():返回此 Throwable 的簡短描述
String toString():返回此 Throwable 的詳細消息字符串
void printStackTrace():JVM打印異常對象,默認使用這個方法,這是最詳細的異常信息

// 可以在catch使用這三個方法,打印異常信息

catch (IOException e) {// try里拋出什么異常對象,catch就聲明什么異常變量,接收拋出的異常
          // 異常的處理邏輯
          System.out.println(e.getMessage());
          System.out.println(e.toString());
          e.printStackTrace();
      }

Output:異常信息一個比一個詳細

后綴名不是txt// getMessage
java.io.IOException: 后綴名不是txt// toString
java.io.IOException: 后綴名不是txt// printStackTrace
at cn.zhuobo.day12.aboutException.Demo02TryCatch.readFile(Demo02TryCatch.java:23)
at cn.zhuobo.day12.aboutException.Demo02TryCatch.main(Demo02TryCatch.java:10)


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM