Java 常見異常及處理方案


Java 常見異常處理方案

 

 

異常是程序中的一些錯誤,但並不是所有的錯誤都是異常,並且錯誤有時候是可以避免的。

比如說,你的代碼少了一個分號,那么運行出來結果是提示是錯誤java.lang.Error;如果你用System.out.println(11/0),那么你是因為你用0做了除數,會拋出java.lang.ArithmeticException的異常。

異常發生的原因有很多,通常包含以下幾大類:

Java 中一個異常的產生,主要有如下三種原因:

1: Java 內部錯誤發生異常,Java 虛擬機產生的異常。

2: 編寫的程序代碼中的錯誤所產生的異常,例如空指針異常、數組越界異常等。這種異常稱為未檢査的異常,一般需要在某些類中集中處理這些異常。

3: 通過 throw 語句手動生成的異常,這種異常稱為檢査的異常,一般用來告知該方法的調用者一些必要的信息。

這些異常有的是因為用戶錯誤引起,有的是程序錯誤引起的,還有其它一些是因為物理錯誤引起的。為了能夠及時有效地處理程序中

Java 通過面向對象的方法來處理異常。在一個方法的運行過程中,如果發生了異常,則這個方法會產生代表該異常的一個對象,並把它交給運行時的系統,運行時系統尋找相應的代碼來處理這一異常。

 

我們把生成異常對象,並把它提交給運行時系統的過程稱為拋出(throw)異常。運行時系統在方法的調用棧中查找,直到找到能夠處理該類型異常的對象,這一個過程稱為捕獲(catch)異常。

 

Java 異常強制用戶考慮程序的強健性和安全性。異常處理不應用來控制程序的正常流程,其主要作用是捕獲程序在運行時發生的異常並進行相應處理。編寫代碼處理某個方法可能出現的異常,可遵循如下三個原則:

在當前方法聲明中使用 try catch 語句捕獲異常。

一個方法被覆蓋時,覆蓋它的方法必須拋出相同的異常或異常的子類。

如果父類拋出多個異常,則覆蓋方法必須拋出那些異常的一個子集,而不能拋出新異常。的運行錯誤,Java 專門引入了異常類。

下面是一些常見的異常以及解決方案:

 

空指針異常:NullPointerException。這個異常我們開發中最常見的異常了,產生以下圖為例,其實就是blog這個對象是null,當null調用屬性或者方法的時候就會報空指針異常。

所謂的指針,就是java中的對象的引用。比如String s;這個s就是指針。 2.所謂的空指針,就是指針的內容為空,比如上面的s,如果令它指向null,就是空指針。 3.所謂的空指針異常,就是一個指針是空指針,你還要去操作它,既然它指向的是空對象,它就不能使用這個對象的方法。比如上面的s假如為null,你還要用s的方法,比如s.equals( String x);那么就會產生空指針異常

空指針異常的解決辦法有:

1:帶有字面值的字符串比較

 在應用程序代碼中一種常見的情況是將字符串變量與字面值進行比較。字符串字面值可能是字符串或枚舉元素。我們將通過使用字面值來調用方法,而不是通過使用null對象來調用方法

2.檢查一個方法的參數
  在執行方法之前,確保檢查了參數是否為null.當參數被適當檢查后,方法會繼續執行。否則,你可以拋出IllegalArgumentException並且通知調用方法傳入的參數有誤。

3 優先使用String.valueOf()而不是toString() 

當你的應用程序代碼如要一個對象的字符串來描述時,避免使用對象的toString方法。如果你的對象的引用為null,NullPointerException將會被拋出。反之,考慮使用靜態方法String.valueOf(),該方法不會拋出任何異常並且在函數參數為null的情況下會打印null。

4. 使用三元運算符

三元運算符能幫助我們避免NullPointerException.運算符具有這樣的形式:

boolean expression ? value1 : value2;

三元運算符能幫助我們避免NullPointerException.運算符具有這樣的形式:首先,計算布爾表達式,如果表達式為true,value1被返回,否則value2被返回。我們能使用三元運算符來處理null指針,例如:

  String message = (str == null) ? “” : str.substring(0, 10);

  變量message將為空,如果str的引用為null,否則,如果str指向實際的數據,message將獲取str的前10個字符。

5.創建返回空集合而不是null的方法

一種非常好的技術是創建一個返回空集合的方法,而不是返回null值。你的應用程序代碼可以迭代空集合並使用它的方法和域,而不會拋出NullPointerException

類型轉換異常:ClassCastException這個錯誤也很常見,通常在程序中出現強制類型轉換時出現這個錯誤。

數組下標越界:ArrayIndexOutOfBoundsException。數組的長度決定了它所能裝載的數據的量,比如數組的長多是4,數組是從0開始計數的,但是調用的確是7,超出數組的范圍,所以報錯。

hql或者sql查詢異常:SQLException或hql.ast.QuerySyntaxException。這是hql或者sql的異常,說明你寫的sql或者hql有錯誤,需要調試修改。

 

404。路徑錯誤。出現404一定是你的請求路徑有問題,或者文件路徑不存在。

 

內存溢出:OutOfMemoryError。代碼中存在死循環,(處理循環)啟動參數設定過小(設定服務器的啟動參數增大),內存中一次加載的數據量過於龐大(減少一次加載的數據),集合類應用的對象未回收(手動回收未回收對象)這個異常導致的結果十分嚴重,據老師所講。美國七十年代發射的航天器,就是因為這個原因導致系統死機爆炸。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM