1. 程式人生 > >異常(捕獲異常)

異常(捕獲異常)

Throwable

 是所有異常的超類

error:這種問題是一個嚴重問題,一般出現這種問題,需要一起解決(程式設計師只能避免嚴重問題),比如:記憶體溢位(OutOfMemory);

Exception(異常):
編譯時期異常:如果程式設計師不管這個,根本沒有辦法執行;需要去解決
執行時期異常(RuntimeException):只要不是編譯時期異常,都屬於異常異常;一般情況,是因為們的程式碼不夠嚴謹.

執行時期異常如何解決:

1)try…catch..finally :捕獲異常
2)thorws:丟擲異常

捕獲異常:
1.一個異常(try…catch…finally..)

try{
可能出現問題的程式碼;
}catch(異常類名 變數名){
輸出語句;
}fianll{
釋放資源;
}

可能出現問題的程式碼如果和catch裡面的異常類名能匹配,則列印輸出語句

變形:

try{
可能出現問題的程式碼;
}chatch(異常類名 變數名){
//提示
}

2.倆個異常

    (1)一個一個去try....catch
(2)一個try,多個catch

實際開發中:捕獲異常的時候:給具體的異常類,不要隨意的使用Exception

注意:捕獲異常:使用一個try多個catch的情況,catch中的異常類名是一種平級關係,如果出現父子關係,那麼這種將最大的異常寫在最後!

3.JDK7以後,出現了一種新的方式

新的方式
try{
可能出現問題的程式碼
}catch(異常類名1 | 異常類名2 | 異常類名3 變數名){

}

注意:
有一個弊端,不夠好:開發中,可能會出現同類型問題,需要捕獲同一個異常資訊;

異常類中的一些方法:
public string getMessage():返回的是一個異常的訊息字串

public String toString():返回的是一個簡單的描述資訊
當前類物件 name:全路徑名”: “(冒號:空格) + getMessage()

public void printStackTrace():描述異常資訊,以及出現的具體位置在哪裡,返回的是void型別,直接在控制檯的!(常用)

程式碼:

public static void main(String[] args) {
      method1();
      method2();
      method3();
      method4();


}
  public static void method1(){
      int a = 10;

      try{
          System.out.println(a/0);
      }catch(ArithmeticException e){
          System.out.println("除數不能為0");
      }
  }//除數不能為0

  public static void method2(){
      int a = 20;
      int [] arr = {10,20,30};
      try{
          System.out.println(a/0);
      }catch(ArithmeticException e){
          System.out.println("除數不能為0");
      }

      try{
          System.out.println(arr[3]);
      }catch(ArrayIndexOutOfBoundsException e){
          System.out.println("沒有這個索引");
      }

  }//除數不能為0 //沒有這個索引

  public static void method3(){
      int a = 20;
      int [] arr = {10,20,30};
      try{
          System.out.println(a/0);
          System.out.println(arr[3]);
      }catch(ArithmeticException e){
          System.out.println("除數不能為0");
      }catch(ArrayIndexOutOfBoundsException e){
          System.out.println("沒有這個索引");
      }
  }//除數不能為0

  public static void method4(){
      int a = 20;
      int [] arr = {10,20,30};
      try{
          System.out.println(a/0);
          System.out.println(arr[3]);
      }catch(ArithmeticException e){
          System.out.println("除數不能為0");
      }catch(ArrayIndexOutOfBoundsException e){
          System.out.println("沒有這個索引");
      }catch(Exception e){
          System.out.println("程式碼可能會問題,但是具體不知道在哪");
      }
  }//除數不能為0