一,異常的概述和分類
- A:異常的概述
- 異常就是Java程序在運行過程中出現的錯誤。
- B:異常的分類
- 通過API查看Throwable
- Error
- 服務器宕機,數據庫崩潰等
- Exception
-
C:異常的繼承體系
- Throwable
- Error
- Exception
- RuntimeException
- Throwable
二,JVM默認是如何處理異常的
- A:JVM默認是如何處理異常的
- main函數收到這個問題時,有兩種處理方式:
- a:自己將該問題處理,然後繼續運行
- b:自己沒有針對的處理方式,只有交給調用main的jvm來處理
- jvm有一個默認的異常處理機制,就將該異常進行處理.
- 並將該異常的名稱,異常的信息.異常出現的位置打印在了控制檯上,同時將程序停止運行
- B:案例演示
- JVM默認如何處理異常
三,try...catch的方式處理異常1
try{
需要被檢測的代碼;
}catch(異常類 變量){
處理異常代碼;(處理方式)
}finally{
一定會執行的語句;
}
四,try...catch的方式處理異常2
try{
需要被檢測的代碼;
}catch(異常類1 變量){
處理異常代碼;(處理方式)
}catch(異常類2 變量){
處理異常代碼;(處理方式)
}finally{
一定會執行的語句;
}
五,編譯期異常和運行期異常的區別
-
Java中的異常被分爲兩大類:編譯時異常和運行時異常。
-
所有的RuntimeException類及其子類的實例被稱爲運行時異常,其他的異常就是編譯時異常
-
編譯時異常
- Java程序必須顯示處理,否則程序就會發生錯誤,無法通過編譯
- 運行時異常
- 無需顯示處理,也可以和編譯時異常一樣處理
-
六,Throwable的幾個常見方法
- a:getMessage()
- 獲取異常信息,返回字符串。
- b:toString()
- 獲取異常類名和異常信息,返回字符串。
- c:printStackTrace()
- 獲取異常類名和異常信息,以及異常出現在程序中的位置。返回值void。
七,throws的方式處理異常
- 定義功能方法時,需要把出現的問題暴露出來讓調用者去處理。
- 那麼就通過throws在方法上標識。
八,throw的概述以及和throws的區別
- A:throw的概述
- 在功能方法內部出現某種情況,程序不能繼續運行,需要進行跳轉時,就用throw把異常對象拋出。
- B:案例演示
- 分別演示編譯時異常對象和運行時異常對象的拋出
- C:throws和throw的區別
- a:throws
- 用在方法聲明後面,跟的是異常類名
- 可以跟多個異常類名,用逗號隔開
- 表示拋出異常,由該方法的調用者來處理
- b:throw
- 用在方法體內,跟的是異常對象名
- 只能拋出一個異常對象名
- 表示拋出異常,由方法體內的語句處理
- a:throws
九,finally關鍵字的特點及作用
- A:finally的特點
- 被finally控制的語句體一定會執行
- 特殊情況:在執行到finally之前jvm退出了(比如System.exit(0))
- B:finally的作用
- 用於釋放資源,在IO流操作和數據庫操作中會見到
- C:案例演示
- finally關鍵字的特點及作用
十,finally關鍵字的面試題
- A:面試題1
- final,finally和finalize的區別
- fina *l可以修飾類,不能被繼承
* 修飾方法,不能被重寫
* 修飾變量,只能賦值一次
- finally是try語句中的一個語句體,不能單獨使用,用來釋放資源
- finalize是一個方法,當垃圾回收器確定不存在對該對象的更多引用時,由對象的垃圾回收器調用此方法。
- B:面試題2
- 如果catch裏面有return語句,請問finally的代碼還會執行嗎?如果會,請問是在return前還是return後。
- 會執行,在return前執行。
十一,自定義異常概述和基本使用
- A:爲什麼需要自定義異常
- 舉例:人的年齡
- B:自定義異常概述
- 繼承自Exception
- 繼承自RuntimeException
- C:案例演示
- 自定義異常的基本使用
十二,異常的注意事項及如何使用異常處理
- A:異常注意事項
- a:子類重寫父類方法時,子類的方法必須拋出相同的異常或父類異常的子類。(父親壞了,兒子不能比父親更壞)
- b:如果父類拋出了多個異常,子類重寫父類時,只能拋出相同的異常或者是他的子集,子類不能拋出父類沒有的異常
- c:如果被重寫的方法沒有異常拋出,那麼子類的方法絕對不可以拋出異常,如果子類方法內有異常發生,那麼子類只能try,不能throws
-
B:如何使用異常處理
- 原則:如果該功能內部可以將問題處理,用try,如果處理不了,交由調用者處理,這是用throws
-
區別:
- 後續程序需要繼續運行就try
- 後續程序不需要繼續運行就throws
-
如果JDK沒有提供對應的異常,需要自定義異常。
十三,練習
- 鍵盤錄入一個int類型的整數,對其求二進制表現形式
- 如果錄入的整數過大,給予提示,錄入的整數過大請重新錄入一個整數BigInteger
- 如果錄入的是小數,給予提示,錄入的是小數,請重新錄入一個整數
- 如果錄入的是其他字符,給予提示,錄入的是非法字符,請重新錄入一個整數
Scanner scanner = new Scanner(System.in);
System.out.println("請輸入一個整數");
while(true){
String str = scanner.nextLine();
try{
Integer i = Integer.parseInt(str);
String binary = Integer.toBinaryString(i);
System.out.println("錄入成功,整數是:"+i+"二進制是:"+binary);
break;
}catch(Exception e){
try {
BigInteger bi = new BigInteger(str);
System.out.println("錄入的整數過大,請重新錄入:");
continue;
} catch (Exception e1) {
try{
Double d = Double.parseDouble(str);
System.out.println("錄入的是小數,請重新錄入:");
continue;
}catch(Exception e2){
System.out.println("錄入的是非法字符,請重新錄入一個整數:");
}
}
}
}