Java經(jīng)典面試題匯總:異常
1. Java的異常機制
Throwable類是Java異常類型的頂層父類,一個對象只有是 Throwable 類的(直接或者間接)實例,他才是一個異常對象,才能被異常處理機制識別。JDK中內(nèi)建了一些常用的異常類,我們也可以自定義異常。
Throwable又派生出Error類和Exception類。
錯誤:Error類以及他的子類的實例,代表了JVM本身的錯誤。錯誤不能被程序員通過代碼處理,Error很少出現(xiàn)。因此,程序員應(yīng)該關(guān)注Exception為父類的分支下的各種異常類。
異常:Exception以及他的子類,代表程序運行時發(fā)送的各種不期望發(fā)生的事件??梢员籎ava異常處理機制使用,是異常處理的核心。
2. Java如何自定義異常?
自定義異常類只需從Exception類或者它的子類派生一個子類即可。自定義異常類如果繼承Exception類,則為受檢查異常,必須對其進行處理;如果不想處理,可以讓自定義異常類繼承運行時異常RuntimeException類。
public class BizException extends Exception { //默認構(gòu)造器 public BizException() { } public BizException(String message) { super(message); } }
3. throw 和 throws 的區(qū)別?
throw:是真實拋出一個異常。
throws:是聲明可能會拋出一個異常。
4. Java 中被檢查的異常和不受檢查的異常有什么區(qū)別?
被檢查的異常應(yīng)該用 try-catch 塊代碼處理或用 throws 關(guān)鍵字拋出,不受檢查的異常在程序中不要求被處理或用 throws 拋出。
5. final、finally、finalize 有什么區(qū)別?
final:是修飾符,如果修飾類,此類不能被繼承;如果修飾方法和變量,則表示此方法和此變量不能在被改變,只能使用。
finally:是 try{} catch{} finally{} 最后一部分,表示不論發(fā)生任何情況都會執(zhí)行,finally 部分可以省略,但如果 finally 部分存在,則一定會執(zhí)行 finally 里面的代碼。
finalize: 是 Object 類的一個方法,在垃圾收集器執(zhí)行的時候會調(diào)用被回收對象的此方法
6. try-catch-finally 中哪個部分可以省略?
try-catch-finally 其中 catch 和 finally 都可以被省略,但是不能同時省略, 也就是說有 try 的時候,必須后面跟一個 catch 或者 finally。
7. try-catch-finally 中,如果 catch 中 return 了,finally 還會執(zhí)行嗎?
finally 一定會執(zhí)行,即使是 catch 中 return 了,catch 中的 return 會等 finally 中的代碼執(zhí)行完之后,才會執(zhí)行。
8. Java 中什么時候使用斷言?
斷言在開發(fā)中是一種常用的調(diào)試方式,很多開發(fā)語言中都支持這種機制。一般來說,斷言用于保證程序最基本、關(guān)鍵的正確性,斷言檢查通常在開發(fā)和測試時開啟,為了保證程序的執(zhí)行效率,在軟件發(fā)布后斷言檢查通常是關(guān)閉的,斷言是一個包含布爾表達式的語句,在執(zhí)行這個語句時假定該表達式為 true,如果表達式的值為 false 則系統(tǒng)會報告一個 AssertionError。
9. 運行時異常與一般異常有何異同?
異常表示程序運行過程中可能出現(xiàn)的非正常狀態(tài),運行時異常表示虛擬機的通常操作中可能遇到的異常,是一種常見運行錯誤。java編譯器要求方法必須聲明拋出可能發(fā)生的非運行時異常,但是并不要求必須聲明拋出未被捕獲的運行時異常。
10. 你平時在項目中是如何對異常進行處理的?
(1)盡量避免出現(xiàn)runtimeException 。比如對于可能出現(xiàn)空指針的代碼。帶使用對象之前一定要推斷一下該對象是否為空。必要的時候?qū)untimeException也進行try catch處理。
(2)進行try catch處理的時候要在catch代碼塊中對異常信息進行記錄,通過調(diào)用異常類的相關(guān)方法獲取到異常的相關(guān)信息,返回到web端,給到給用戶良好的用戶體驗。
11. 常見的異常類有哪些?
- NullPointerException 空指針異常
- ClassNotFoundException 指定類不存在
- NumberFormatException 字符串轉(zhuǎn)換為數(shù)字異常
- IndexOutOfBoundsException 數(shù)組下標越界異常
- ClassCastException 數(shù)據(jù)類型轉(zhuǎn)換異常
- FileNotFoundException 文件未找到異常
- NoSuchMethodException 方法不存在異常
- IOException IO 異常
- SocketException Socket 異常
總結(jié)
本篇文章就到這里了,希望能給你帶來幫助,也希望您能夠多多關(guān)注腳本之家的更多內(nèi)容!
相關(guān)文章
springboot2.0+elasticsearch5.5+rabbitmq搭建搜索服務(wù)的坑
這篇文章主要介紹了springboot2.0+elasticsearch5.5+rabbitmq搭建搜索服務(wù)的坑,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2018-06-06SpringBoot集成WebSocket的兩種方式(JDK內(nèi)置版和Spring封裝版)
這篇文章主要介紹了SpringBoot集成WebSocket的兩種方式,這兩種方式為JDK內(nèi)置版和Spring封裝版,本文結(jié)合示例代碼給大家介紹的非常詳細,需要的朋友可以參考下2023-06-06Java實現(xiàn)解壓zip壓縮包的兩種方法(支持多層級)
壓縮文件在生活中經(jīng)常能用到,在Java中提供了壓縮和解壓縮文件的功能,本文主要介紹了Java實現(xiàn)解壓zip壓縮包的兩種方法(支持多層級),感興趣的可以了解一下2024-03-03MyBatis寫入Json字段以及Json字段轉(zhuǎn)對象示例詳解
這篇文章主要給大家介紹了關(guān)于MyBatis寫入Json字段以及Json字段轉(zhuǎn)對象的相關(guān)資料,文中通過實例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考借鑒價值,需要的朋友可以參考下2023-07-07SpringBoot如何根據(jù)目錄路徑生成接口的url路徑
這篇文章主要介紹了SpringBoot如何根據(jù)目錄路徑生成接口的url路徑,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2021-11-11SpringCloud Config配置中心原理以及環(huán)境切換方式
這篇文章主要介紹了SpringCloud Config配置中心原理以及環(huán)境切換方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2022-03-03java synchronized加載加鎖-線程可重入詳解及實例代碼
這篇文章主要介紹了java synchronized加載加鎖-線程可重入詳解及實例代碼的相關(guān)資料,需要的朋友可以參考下2017-02-02Spring Boot2.0實現(xiàn)靜態(tài)資源版本控制詳解
這篇文章主要給大家介紹了關(guān)于Spring Boot2.0實現(xiàn)靜態(tài)資源版本控制的相關(guān)資料,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2018-11-11Spring?Boot多數(shù)據(jù)源事務(wù)@DSTransactional的使用詳解
本文主要介紹了Spring?Boot多數(shù)據(jù)源事務(wù)@DSTransactional的使用詳解,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2023-06-06