day_12
--暑假學習第十二天--
一.異常
我們的java程序也是會存在某些不正常 的情況的,這些不正常的情況我們就統稱異常。
異常體系:--------| Throwable
------------| Error
------------| Exception
Throwable常用的方法:
?toString()? 返回當前異常對象的完整類名+病態信息。
?getMessage() 返回的是創建Throwable傳入的字符串信息。
?printStackTrace() 打印異常的棧信息。 異常的體系:
----------| Throwable? 所以異常或者錯誤類的超類
--------------|Error? 錯誤?? 錯誤一般是用于jvm或者是硬件引發的問題,所以我們一般不會通過代碼去處理錯誤的。
--------------|Exception 異常?? 是需要通過代碼去處理的。 如何區分錯誤與異常:
?如果程序出現了不正常的信息,如果不正常的信息的類名是以Error結尾的,那么肯定是一個錯誤。
?如果是以Exception結尾的,那么肯定就是一個異常。 疑問: 下面的信息是通過printStackTrace方法打印出來,那么異常對象從何而來呢?
?Exception in thread "main" java.lang.ArithmeticException: / by zero
??????? at Demo10.div(Demo10.java:10)
??????? at Demo10.main(Demo10.java:5)
?
jvm運行到a/b這個語句的時候,發現b為0,除數為0在我們現實生活中是屬于
不正常的情況,jvm一旦發現了這種不正常的情況時候,那么jvm就會馬上創建
一個對應的異常對象,并且會調用這個異常對象 的printStackTrace的方法來處理。
異常的處理--捕獲處理: 捕獲處理 捕獲處理的格式:
???
???try{
????可能發生異常的代碼; }catch(捕獲的異常類型 變量名){
????處理異常的代碼....
???}
?
??捕獲處理要注意的細節:
???1. 如果try塊中代碼出了異常經過了處理之后,那么try-catch塊外面的代碼可以正常執行。
???2. 如果try塊中出了異常的代碼,那么在try塊中出現異常代碼后面的代碼是不會執行了。
???3. 一個try塊后面是可以跟有多個catch塊的,也就是一個try塊可以捕獲多種異常的類型。
???4. 一個try塊可以捕獲多種異常的類型,但是捕獲的異常類型必須從小到大進行捕獲,否則編譯報錯。
疑問一 : 異常的處理感覺沒有多大作用,因為都是輸出一個話而已?
??異常處理非常有用,只不過是由于我們目前所接觸的知識點太過于局限而已。 疑問二: 以后捕獲處理 的時候是否就是捕獲Exception即可?
?錯的,因為我們在現實開發中遇到不同的異常類型的時候,我往往會有不同的處理方式。
?所以要分開不同的異常類型處理。 eg: class Demo {public static void main(String[] args) {int[] arr = null;div(4,0,arr);}public static void div(int a , int b,int[] arr){int c = 0;try{c = a/b; //jvm在這句話的時候發現了不正常的情況,那么就會創建一個對應的異常對象。System.out.println("數組的長度:"+ arr.length);}catch(ArithmeticException e){//處理異常的代碼....System.out.println("異常處理了....");System.out.println("toString:"+ e.toString());}catch(NullPointerException e){System.out.println("出現了空指針異常....");}catch(Exception e){ System.out.println("我是急診室,包治百病!");}System.out.println("c="+c);}}
?
二.異常的處理方式----拋出處理
拋出處理(throw throws)拋出處理要注意的細節:
?1. 如果一個方法的內部拋出了一個異常 對象,那么必須要在方法上聲明拋出。
?2. 如果調用了一個聲明拋出異常 的方法,那么調用者必須要處理異常。
?3. 如果一個方法內部拋出了一個異常對象,那么throw語句后面的代碼都不會再執行了(一個方法遇到了throw關鍵字,該方法也會馬上停止執行的)。
?4. 在一種情況下,只能拋出一種類型異常對象。 throw 與throws兩個關鍵字:
?1. throw關鍵字是用于方法內部的,throws是用于方法聲聲明上的。
?2. throw關鍵字是用于方法內部拋出一個異常對象的,throws關鍵字是用于在方法聲明上聲明拋出異常類型的。
?3. throw關鍵字后面只能有一個異常對象,throws后面一次可以聲明拋出多種類型的 異常。
疑問:何時使用拋出處理?何時捕獲處理?原則是如何?
?如果你需要通知到調用者,你代碼出了問題,那么這時候就使用拋出處理.
?如果代碼是直接與用戶打交道遇到了異常千萬不要再拋,再拋的話,就給了用戶了。 這時候就應該使用捕獲處理。 eg: class Demo2 {public static void main(String[] args) {try{int[] arr = null;div(4,0,arr); //調用了一個 聲明拋出異常類型 的方法}catch(Exception e){System.out.println("出現異常了...");e.printStackTrace();}}public static void div(int a, int b,int[] arr) throws Exception,NullPointerException {if(b==0){throw new Exception(); //拋出一個異常對象...}else if(arr==null){throw new NullPointerException();}int c = a/b;System.out.println("c="+c);} }
?
轉載于:https://www.cnblogs.com/seduce-bug/p/9381445.html
總結
- 上一篇: IDEA连接数据库自动生成实体类
- 下一篇: uva1152 - 4 Values w