一、基礎概念
1、throw和throws的區別:
位置不同:throws用在函數上,后面跟的是異常類,可以跟多個。
throw用在函數內,后面跟的是異常對象。
功能不同:throws用來聲明異常,讓調用者知道該功能有可能出現的問題,並由調用者給出預先的處理方式。
throw拋出具體問題的對象。語句執行到throw功能就結束了,跳轉到調用者。並將具體的問題對象拋給調用者。
注意:throw語句獨立存在,下面不要定義其他語句。因為執行不到throw下面的語句。
2、異常體系的特點: 類以及對象都具備可拋性,可以被throws和throw所操作。
3、異常的原則:
一般情況:(編譯時會檢測到異常)
功能內部有異常throw拋出,功能上一定要throws聲明。功能內部有異常throw拋出,功能上一定要throws聲明。(內部拋什么,功能上就聲明什么。)
聲明的目的就是為了讓調用者處理,如果調用者不處理,編譯失敗。
特殊情況:(編譯時不進行檢查)
當函數內通過throw拋出了RuntimeException時,函數上可以不用throws聲明。
不聲明是不讓調用者處理。運行時發生異常,程序會停止,對代碼進行修改。
4.Exception分兩種:
編譯時會被檢測的異常。
運行時異常(編譯時不檢測)RuntimeException
二、編譯時會被檢測的異常代碼:
1 class Demo 2 { 3 int div(int a,int b)throws Exception//聲明異常Exception 4 { 5 if(b==0) 6 throw new Exception("異常信息:除數不能為0");//拋出具體問題,編譯時進行檢測。 7 return a/b; 8 } 9 } 10 11 class ExceptionDemo1 12 { 13 public static void main (String[] arge) 14 { 15 Demo d = new Demo(); 16 17 //對異常進行處理 18 try 19 { 20 int num = d.div(4,0); 21 System.out.println("num="+num); 22 } 23 catch(Exception e) 24 { 25 //處理這個對象,可以使用該對象的方法。 26 System.out.println("處理異常的代碼:除數不能為0"); 27 System.out.println(e.getMessage());//異常信息 28 System.out.println(e.toString());//異常名稱+異常信息 29 e.printStackTrace();//異常名字+異常信息+位置。jvm默認處理收到異常就是調用這個方法。將信息顯示在屏幕上。 30 } 31 System.out.println("over"); 32 } 33 }
運行代碼:

三、編譯時不檢測,運行異常程序停止代碼
ArithemticException異常 屬於 RuntimeException異常,所以函數上也可以不用throws聲明。
1 class Demo 2 { 3 int div(int a,int b) 4 { 5 if(b==0) 6 throw new ArithmeticException("異常信息:除數不能為0");//拋出具體問題,編譯時不檢測 7 return a/b; 8 } 9 } 10 11 class ExceptionDemo1 12 { 13 public static void main (String[] arge) 14 { 15 Demo d = new Demo(); 16 17 int num =d.div(4,0); 18 System.out.println("num="+num); 19 System.out.println("over");//這句話不能被執行了 20 } 21 }
代碼運行:

NullPointerExceptionException異常 和 ArrayIndexOutOfBoundsException異常 都 屬於 RuntimeException異常,所以函數上也可以不用throws聲明。
1 class ExceptionDemo1 2 { 3 public static void main(String[] args) 4 { 5 int[] arr = new int[3]; 6 //arr = null; 7 System.out.println("element:"+getElement(arr,-2)); 8 } 9 //定義一個功能。返回一個整型數組中指定位置的元素。 10 public static int getElement(int[] arr,int index) 11 { 12 if(arr==null) 13 throw new NullPointerException("數組實體不存在"); 14 15 if(index<0 || index>=arr.length) 16 { 17 throw new ArrayIndexOutOfBoundsException(index+",角標不存在"); 18 } 19 System.out.println("element:"+getElement(arr,-2)); 20 int element = arr[index]; 21 return element; 22 } 23 }
代碼運行:

