日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > java >内容正文

java

Java中异常机制

發布時間:2024/4/30 java 40 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Java中异常机制 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

一、概述

  • 異常是一套用于反饋和處理問題的機制
  • Throwable 是所有異常和錯誤的頂級父類
  • Throwable派生出兩個類Error和Exeption
  • 二、Error

  • 出現在代碼邏輯沒有錯誤,因外界因素或環境因素導致的嚴重錯誤的情況。
  • 一旦出現,無法修改
  • 三、Exception

  • -異常,代表了程序在編譯和運行時發生的各種不期望發生的事件。是java異常處理的核心。
  • 非檢查是異常(運行時異常):
  • -編譯時不會報錯,運行時報錯,往往是語法正確,但是邏輯錯誤。?
  • 編譯前可以處理,也可以不處理。
  • 一個小的父類 --- RuntimeException
  • 檢查異常(編譯時異常):
  • 編譯時已經出現,一旦出現,則必須處理
  • 要么拋出,要么捕獲
  • 四、異常的捕獲

    public static void main(String[] args) {// System.out.println(1 / 0);try {int[] arr = new int[3];System.out.println(arr[5]);} catch (ArrayIndexOutOfBoundsException e) {System.out.println();}}
  • 多個異常可以同時處理,用多個catch捕獲
  • 如果所有異常的處理方式都一樣,可以用統一的Exception一次捕獲
  • 多個異常分組處理,在同一組異常之間可以用"|"隔開。(從JDK1.7開始)try {String msg = readFile(null);System.out.println(msg);} catch (PathNotExistException | FileCannotReadException e) {// 打印棧軌跡e.printStackTrace();// System.out.println(e.getMessage());} catch (Exception e) {} finally {System.out.println("文件釋放");}
  • 如果方法拋出的是父類異常,則必須要一以父類異常捕獲
  • 在捕獲異常 時,要求先捕獲子類異常,在捕獲父類異常。否則子類異常將永遠無法捕獲到。
  • 五、排查異常

  • 查看異常的名字
  • 查看異常信息
  • 從棧軌跡尾端開始看起(控制臺從上至下)。
  • 注意:如果異常最終拋給了JVM,那么JVM默認打印 這個異常的棧軌跡。

    六、異常的自定義

  • 當一個類繼承Exception,則默認是編譯時異常
  • 當一個類繼承RuntimeException時,才是運行是異常。
  • 一個類繼承運行時異常類,那么這個類就是運行時異常;反之,則為編譯時異常。
  • public class Demo_01 {public static void main(String[] args) {try {String str = readFile("C:\\ a.txt");} catch (FileCannotReadException e) {//打印異常信息System.out.println(e.getMessage());//打印棧軌跡e.printStackTrace();//查看異常: 1. 查看異常名字 2. 查看異常信息 3. 從棧軌跡尾端開始排查(控制臺中從上致下)//如果異常最終拋給了JVM,JVM默認打印這個異常的棧軌跡}}private static String readFile(String string) throws FileCannotReadException {//如果是是以C開頭,則認為這個文件不可被讀取if(string == null){//運行時異常,可以處理,也可以不處理throw new NullPointerException("路徑不能為空");}elseif(string.startsWith("C")){//編譯時異常一定要處理throw new FileCannotReadException("文件不能被讀取");}return null;} } //當一個類繼承Exception時,默認是編譯時異常//如果一個類繼承的時RuntimeException,才會稱為一個運行時異常//一個類繼承編譯時異常,則這個類時編譯時異常。反之為運行時異常。 class FileCannotReadException extends Exception{public FileCannotReadException() {}public FileCannotReadException(String msg){super(msg);} }

    七、異常方法的重寫和重載

  • 異常不會影響方法的重載。當一個類中方法名一致,但參數列表不一致時發生方法的重載,方法的重載和修飾符、返回值類型、異常都沒有關系。
  • 在重寫父類的異常方法時,子類重寫的方法拋出的異常不能超出 父類異常方法拋出異常的范圍(編譯時異常的要求)。方法重寫時必須遵循兩小兩大一小原則。(參考:http://blog.csdn.net/chou_out_man/article/details/77976679)
  • 子類不能拋出范圍比父類 更大的異常 --- 針對的是編譯時異常 , 但對運行時異常 。?class A {public void m() throws IOException {}public void m(int i) throws SQLException {}}class B extends A {// 子類不能拋出比父類更多的異常。// 在方法重寫的時候,子類中重寫的方法拋出的異常不能超過父類。---要求的是編譯時異常public void m() throws EOFException, FileNotFoundException, NullPointerException {}}
  • 八、finally關鍵字的運用

  • 無論如何都會執行一次。往往用于一些資源需要回收等一系列 善后處理。public static void main(String[] args) {try {Scanner s = new Scanner(System.in);System.out.println(s.nextInt() / s.nextInt());s.close();} catch (Exception e) {e.printStackTrace();} finally {// 無論代碼中出現異常與否,都會執行一次。System.out.println("執行完畢");}}
  • 無論try的代碼中是否有異常,finally中的代碼都會執行一次。
  • finally執行在try中return和異常發生之前。
  • 補充案例:public static void main(String[] args) {System.out.println(m());}@SuppressWarnings("finally")private static int m() {try {return 1;} catch (Exception e) {return 2;} finally {try {return 4;} finally {return 5;}}} // 結果是5 public static void main(String[] args) {System.out.println(m());}private static int m() {int i = 5;// 對于程序而言,是從上到下從左到右依次編譯運行的。try {// return 5;-> i->6return i++;} finally {// i = 6; -> 7i++;System.out.println("Finally:" + i);}}public static void main(String[] args) {System.out.println(m());}public static Person m() {Person p = new Person();try {p.setName("翠花");p.setAge(16);// return p; -> 實際上返回的是p的地址return p;} finally {p = new Person();p.setName("如花");p.setAge(18);}}







  • 總結

    以上是生活随笔為你收集整理的Java中异常机制的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。