異常(捕獲異常)
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