我們知道java.lang包底下有一個java.lang.Throwable他實現了兩個介面,一個是Error;另一個是Exception
其中Error:致命的錯誤,不可修複的,一般出現在JAVA虛擬機器
接下來我們主要來介紹一下Exception
一、Exception:異常,代碼寫錯了
1、編譯時間異常:編譯的時候要檢查,並且一定要寫try-catch編譯才能通過
2、運行時異常,他是比較特殊的一個異常,變現為編譯時間正常,啟動並執行時候出異常 RuntimeException是java.lang包底下的所有的異常當中的唯一一個運行時的異常;其中常出現的異常有:
ArrayIndexOutOfBoundsException
NumberFormatException
NullPointException:當一個引用的值為NULL的時候,試圖用他來調用方法或者訪問屬性就會發生null 指標異常
下面這個代碼也說明了NumberFormatException這個異常,同時也瞭解try-catch語句塊的使用方法:
import java.util.*;
public class test{
public static void main(String[] args){
try{
int num1 = new Integer(args[0]);
int num2 = new Integer(args[1]);
int num3 = num1 + num2;
System.out.println(num3);
}catch(NumberFormatException e){
System.out.println("請輸入合法的整數!!");
}finally{
System.out.println("計算完成");
}
}
}
程式詳解:這個程式如果輸入計算的數位時候輸入了非整數就會執行catch語句塊裡面的代碼,也就是說如果try語句塊裡面的代碼運行時出現了異常那麼try語句塊裡面異常語句下面的代碼就不會再執行,轉而執行catch語句塊裡面的語句,但是finally語句塊是始終都會執行的,不管程式有沒有發生異常他裡面的語句都會執行。
知識擴充:try-catch語句塊可以捕獲多個異常,但是要注意的是先捕獲子類的異常再捕獲父類的異常
二、Throws、Throw關鍵字
1、Throws關鍵字 :把異常拋給調用他的環境也就是說把異常往上一級拋
2、Throw關鍵字:手動拋出,用於自己寫的異常,今後會在strus架構個人化異常的時候使用。下面這個簡單的程式詳細的實現該關鍵字的使用方法
import java.util.*;public class test{ public static void main(String[] args){ Person p = new Person(); p.SetAge(134); } }class Person{ int age; public void SetAge(int age){ if(age<0||age>120){ throw new MyAgeException("年齡是在0到120歲之間"); } else{ this.age = age; } }}class MyAgeException extends RuntimeException{ MyAgeException(String msg){ super(msg); }}
程式詳解:上述程式自己手動的寫了一個異常MyAgeException繼承至RuntimeException當main函數傳入年齡的時候我們自己對傳入的年齡進行判斷,如果不合格話就使用關鍵字throw建立一個MyAgeException異常對象並把異常傳給這個對象,同時傳入一個異常的提示資訊。因為父類中已經寫好了顯示資訊的方法,所以我們只要調用父類的顯示方法即可,所以重寫MyAgeException 構造方法的時候方法體裡面直接調用父類的方法super(msg)來顯示資訊