1. 程式人生 > >JAVA異常架構圖及常見面試題

JAVA異常架構圖及常見面試題

別無選擇 code lower read strong mage 設計 空指針 不可變

技術分享

紅色為檢查異常,就是eclipse要提示你是try catch 還是throws。

非檢查異常,就是/0,nullpointexception,數據越界訪問indexOfOutBounds 異常

錯誤: 最常見的oom錯誤,還有classnotFoundeError,StackOverflowError

java異常處理面試題歸納

1、error和exception有什麽區別

error表示系統級的錯誤,是java運行環境內部錯誤或者硬件問題,不能指望程序來處理這樣的問題,除了退出運行外別無選擇,它是Java虛擬機拋出的。

exception 表示程序需要捕捉、需要處理的異常,是由與程序設計的不完善而出現的問題,程序必須處理的問題

2、運行時異常和一般異常有何不同

Java提供了兩類主要的異常:runtimeException和checkedException

一般異常(checkedException)主要是指IO異常、SQL異常等。對於這種異常,JVM要求我們必須對其進行cathc處理,所以,面對這種異常,不管我們是否願

意,都是要寫一大堆的catch塊去處理可能出現的異常。

運行時異常(runtimeException)我們一般不處理,當出現這類異常的時候程序會由虛擬機接管。比如,我們從來沒有去處理過NullPointerException,而且

這個異常還是最常見的異常之一。

出現運行時異常的時候,程序會將異常一直向上拋,一直拋到遇到處理代碼,如果沒有catch塊進行處理,到了最上層,如果是多線程就有Thread.run()拋出,如

果不是多線程那麽就由main.run()拋出。拋出之後,如果是線程,那麽該線程也就終止了,如果是主程序,那麽該程序也就終止了。

其實運行時異常的也是繼承自Exception,也可以用catch塊對其處理,只是我們一般不處理罷了,也就是說,如果不對運行時異常進行catch處理,那麽結果不

是線程退出就是主程序終止。

如果不想終止,那麽我們就必須捕獲所有可能出現的運行時異常。如果程序中出現了異常數據,但是它不影響下面的程序執行,那麽我們就該在catch塊裏面將異

常數據舍棄,然後記錄日誌。如果,它影響到了下面的程序運行,那麽還是程序退出比較好些。

3、Java中異常處理機制的原理

Java通過面向對象的方式對異常進行處理,Java把異常按照不同的類型進行分類,並提供了良好的接口。在Java中,每個異常都是一個對象,它都是Throwable

或其子類的實例。當一個方法出現異常後就會拋出一個異常對象,該對象中包含有異常信息,調用這個對象的方法可以捕獲到這個異常並對異常進行處理。Java的

異常處理是通過5個關鍵詞來實現的:try catch throw throws finally。

一般情況下是用try來執行一段程序,如果出現異常,系統會拋出(throws),我們可以通過它的類型來捕捉它,或最後由缺省處理器來處理它(finally)。

try:用來指定一塊預防所有異常的程序

catch:緊跟在try後面,用來捕獲異常

throw:用來明確的拋出一個異常

throws:用來標明一個成員函數可能拋出的各種異常

finally:確保一段代碼無論發生什麽異常都會被執行的一段代碼。

4、你平時在項目中是怎樣對異常進行處理的。

(1)盡量避免出現runtimeException 。例如對於可能出現空指針的代碼,帶使用對象之前一定要判斷一下該對象是否為空,必要的時候對runtimeException

也進行try catch處理。

(2)進行try catch處理的時候要在catch代碼塊中對異常信息進行記錄,通過調用異常類的相關方法獲取到異常的相關信息,返回到web端,不僅要給用戶良好

的用戶體驗,也要能幫助程序員良好的定位異常出現的位置及原因。例如,以前做的一個項目,程序遇到異常頁面會顯示一個圖片告訴用戶哪些操作導致程序出現

了什麽異常,同時圖片上有一個按鈕用來點擊展示異常的詳細信息給程序員看的。

5、final、finally、finalize的區別

(1)、final用於聲明變量、方法和類的,分別表示變量值不可變,方法不可覆蓋,類不可以繼承

(2)、finally是異常處理中的一個關鍵字,表示finally{}裏面的代碼一定要執行

(3)、finalize是Object類的一個方法,在垃圾回收的時候會調用被回收對象的此方法。

6、try()裏面有一個return語句,那麽後面的finally{}裏面的code會不會被執行,什麽時候執行,是在return前還是return後?

自己寫了個代碼測試了一下:

技術分享

顯示輸出結果為1,記住就行了,不想去鉆這個問題的牛角尖,也沒有什麽大用處。

原文地址:http://www.cnblogs.com/gaoweixiao99/p/4905860.html

JAVA異常架構圖及常見面試題