本文目錄一覽:
- 1、java中異常的處理方法有哪兩種
- 2、Java中的檢查型異常和非檢查型異常有什麼區別
- 3、java中什麼是非檢測性異常
- 4、北大青鳥java培訓:異常處理的Java最佳方法?
- 5、Java中必檢異常有哪些?為啥要必檢?免檢異常有哪些?
java中異常的處理方法有哪兩種
1.檢查型異常,這樣的異常繼承於Excetpion,就是在編譯期間需要檢查,如果該異常被throw,那麼在該異常所在的method後必須顯示的throws,調用該method的地方也必須捕獲該異常,否則編譯器會拋出異常.ejb里的RemoteException是一個這樣的異常.來源:考試大
2.運行時異常,就是在運行期間系統出現的異常,該類異常繼承於RuntimeException,該類異常在編譯時系統不進行檢查,如NullPointerExcetpion,NumberFormatException.
3.系統錯誤,一般是JVM出現異常時拋出的異常,如OutofMemoryError,這樣的異常在J2EE開發中是不用關心的.考試大論壇
在J2EE開發中,檢查型異常被濫用以至於過一段時間程序員自己都看不懂拋出這樣的異常,.裡面封裝的這些錯誤信息是幹什麼用的,更可怕的是有好多有用的信息找不到了.比如SQLException和RemoteException這樣的異常我們沒必要再進行封裝,這樣的異常只對我們調試程序有用,而對客戶來說它就是一個」系統錯誤」而已.異常處理有一個簡單的原則,你什麼時候需要封裝自己的檢查型異常?就是你很清楚自己拋出這個異常的用途時,比如用戶輸入用戶名和密碼要登錄,但用戶名和密碼不匹配,你就要定義一個檢查型異常,客戶端通過捕獲該異常,然後把相應的錯誤信息反饋給客戶.而其它的自己未預期的錯誤或者異常比如SQLException,只需封裝到EJBException中,ejb container會把它的信息追加到RemoteException里,這樣客戶端捕獲RemoteException後把它寫到系統日誌里,就很容易進行調試。
Java 異常的處理
在 Java 應用程序中,對異常的處理有兩種方式:處理異常和聲明異常。
處理異常:try、catch 和 finally
若要捕獲異常,則必須在代碼中添加異常處理器塊。這種 Java 結構可能包含 3 個部分,
都有 Java 關鍵字。下面的例子中使用了 try-catch-finally 代碼結構。
import java.io.*; public class EchoInputTryCatchFinally { public static void main(String args[]){ System.out.println(」Enter text to echo:」); InputStreamReader isr = new InputStreamReader(System.in); BufferedReader inputReader = new BufferedReader(isr); try{ String inputLine = inputReader.readLine(); System.out.println(」Read:」 + inputLine); } catch(IOException exc){ System.out.println(」Exception encountered: 」 + exc); } finally{ System.out.println(」End. 「); } } 其中:
try 塊:將一個或者多個語句放入 try 時,則表示這些語句可能拋出異常。編譯器知道可能要發生異常,於是用一個特殊結構評估塊內所有語句。
catch 塊:當問題出現時,一種選擇是定義代碼塊來處理問題,catch 塊的目的便在於此。catch 塊是 try 塊所產生異常的接收者。基本原理是:一旦生成異常,則 try 塊的執行中止,JVM 將查找相應的 JVM。
finally 塊:還可以定義 finally 塊,無論運行 try 塊代碼的結果如何,該塊裡面的代碼一定運行。在常見的所有環境中,finally 塊都將運行。無論 try 塊是否運行完,無論是否產生異常,也無論是否在 catch 塊中得到處理,finally 塊都將執行。
try-catch-finally 規則:
必須在 try 之後添加 catch 或 finally 塊。try 塊後可同時接 catch 和 finally 塊,但至少有一個塊。
必須遵循塊順序:若代碼同時使用 catch 和 finally 塊,則必須將 catch 塊放在 try 塊之後。
catch 塊與相應的異常類的類型相關。
一個 try 塊可能有多個 catch 塊。若如此,則執行第一個匹配塊。
可嵌套 try-catch-finally 結構。
在 try-catch-finally 結構中,可重新拋出異常。
除了下列情況,總將執行 finally 做為結束:JVM 過早終止(調用 System.exit(int));在 finally 塊中拋出一個未處理的異常;計算機斷電、失火、或遭遇病毒攻擊。
聲明異常
若要聲明異常,則必須將其添加到方法簽名塊的結束位置。下面是一個實例:
public void errorProneMethod(int input) throws java.io.IOException { //Code for the method,including one or more method //calls that may produce an IOException } 這樣,聲明的異常將傳給方法調用者,而且也通知了編譯器:該方法的任何調用者必須遵守處理或聲明規則。聲明異常的規則如下:
必須聲明方法可拋出的任何可檢測異常(checked exception)。
非檢測性異常(unchecked exception)不是必須的,可聲明,也可不聲明。
調用方法必須遵循任何可檢測異常的處理和聲明規則。若覆蓋一個方法,則不能聲明與覆蓋方法不同的異常。聲明的任何異常必須是被覆蓋方法所聲明異常的同類或子類。
Java中的檢查型異常和非檢查型異常有什麼區別
非檢查異常就是在你敲代碼的時候沒有任何提示,你一運行程序,才可以看到的異常。比如:空指針。
檢查異常就是你敲代碼的時候提示你必須處理。如果你不處理,程序無法運行。比如:io流異常
如果想要專業的回答,請看這篇文章
網頁鏈接
java中什麼是非檢測性異常
在java代碼中,如果調用方法後可能會出現異常,則必須對異常進行處理,寫java代碼時自動拋出的異常稱為檢測性異常,例如在寫文件時會自動拋出IOException;有些異常不會自動拋出,比如在執行parseIntger()方法時,如果括弧中的參數不可以轉換為整數,則會拋出異常,應用程序會終止,而在寫代碼的時候卻不需要處理這個異常,這樣的異常稱為非檢測性異常
北大青鳥java培訓:異常處理的Java最佳方法?
異常處理是Java開發中的一個重要部分。
它是關乎每個應用的一個非功能性需求,是為了處理任何錯誤狀況,比如資源不可訪問,非法輸入,空輸入等等。
Java提供了幾個異常處理特性,以try,catch和finally關鍵字的形式內建於語言自身之中。
Java編程語言也允許你創建新的異常,並通過使用throw和throws關鍵字拋出它們。
事實上,在Java編程中,Java的異常處理不單單是知道語法這麼簡單,它必須遵循標準的JDK庫,和幾個處理錯誤和異常的開源代碼。
這裡北大青鳥將討論一些關於異常處理的Java最佳實踐。
1、為可恢復的錯誤使用檢查型異常,為編程錯誤使用非檢查型錯誤。
選擇檢查型還是非檢查型異常,對於Java編程人員來說,總是讓人感到困惑。
檢查型異常保證你對錯誤條件提供異常處理代碼,這是一種從語言到強制你編寫健壯的代碼的一種方式,但同時會引入大量雜亂的代碼並導致其不可讀。
當然,如果你有替代品和恢復策略的話,捕捉異常並做些什麼看起來似乎也在理。
在Java編程中選擇檢查型異常還是運行時異常。
2、在finally程序塊中關閉或者釋放資源這在Java編程中,是一個廣為人知的最佳實踐,在處理網路和IO類的時候,相當於一個標準。
在finally塊中關閉資源,在正常和異常執行的情況下,保證之前和稀缺資源的合理釋放,這由finally塊保證。
從Java7開始,該語言有了一項更有趣的功能:資源管理自動化或者ARM塊能實現這一功能。
儘管如此,我們仍然要記住在finally塊中關閉資源,這是對於釋放像FileDescriptors這類,應用在socket和文件編程的情況下的有限資源很重要的。
3、在堆棧跟蹤中包含引起異常的原因很多時候,當一個由另一個異常導致的異常被拋出的時候,Java庫和開放源代碼會將一種異常包裝成另一種異常。
日誌記錄和列印根異常就變得非常重要。
Java異常類提供了getCause方法來檢索導致異常的原因,這些(原因)可以對異常的根層次的原因提供更多的信息。
該Java實踐對在進行調試或排除故障大有幫助。
時刻記住,如果你將一個異常包裝成另一種異常時,構造一個新異常要傳遞源異常。
4、始終提供關於異常的有意義的完整的信息異常信息是最重要的地方,因為這是程序員首先看到的第一個地方,這裡你能找到問題產生的根本原因。
這裡始終提供精確的真實的信息。
5、避免過度使用檢查型異常檢查型異常在強制執行方面有一定的優勢,但同時它也破壞了代碼,通過掩蓋業務邏輯使代碼可讀性降低。
只要你不過度使用檢查型異常,你可以最大限度的減少這類情況,這樣做的結果是你會得到更清潔的代碼。
你同樣可以使用Java7的新功能,以移除重複項。
6、將檢查型異常轉為運行時異常這是在像Spring之類的多數框架中用來限制使用檢查型異常的技術之一,大部分出自於JDBC的檢查型異常,都被包裝進DataAccessException中,而(DataAccessException)異常是一種非檢查型異常。
這是Java最佳實踐帶來的好處,特定的異常限制到特定的模塊,像SQLException放到DAO層,將意思明確的運行時異常拋到客戶層。
7、記住對性能而言,異常代價高昂需要記住的一件事是異常代價高昂,同時讓你的代碼運行緩慢。
假如你有方法從ResultSet(結果集)中進行讀取,這時常會拋出SQLException異常而不會移到下一元素,這將會比不拋出異常的正常代碼執行的慢的多。
因此最大限度的減少不必要的異常捕捉和移動,那裡沒有什麼固定的原因。
不要僅僅是拋出和捕捉異常,如果你能使用boolean變數去表示執行結果,可能會得到更整潔,更高性能的解決方案。
修正錯誤的根源,避免不必須要的異常捕捉。
Java中必檢異常有哪些?為啥要必檢?免檢異常有哪些?
1,java的異常分為兩大類,受檢異常(即必檢異常),它繼承自Exception類和運行時異常(即免檢異常)它繼承自RuntimeException
2,在Java代碼設計時,如果A方法調用了B方法,要傳給B方法參數,但是這個參數B覺得A可能會傳錯,所以就會在B中檢測,如果發現不對,就拋出一個受檢異常。那個A在調用B的方法的時候就會被要求強制檢查這個異常,防止出錯。比如IOException
3,免檢異常一般是那種錯誤異常,一但出現這種異常,就表示當前執行的程序無法再執行下去了。比如NullPointException.
原創文章,作者:PEGA,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/135832.html