當前位置:首頁 » 編程語言 » java全局異常處理

java全局異常處理

發布時間: 2022-09-02 10:24:00

java異常處理的意義何在為什麼要做異常處理,作用是什麼

代替日漸衰落的error code方法的新法,提供error code所未能具體的優勢。

異常處理分離了接收和處理錯誤代碼。這個功能理清了編程者的思緒,也幫助代碼增強了可讀性,方便了維護者的閱讀和理解。


異常處理(又稱為錯誤處理)功能提供了處理程序運行時出現的任何意外或異常情況的方法。異常處理使用try、catch 和 finally關鍵字來嘗試可能未成功的操作,處理失敗,以及在事後清理資源。


(1)java全局異常處理擴展閱讀

程序設計的要求之一就是程序的健壯性。希望程序在運行時能夠不出或者少出問題。但是,在程序的實際運行時,總會有一些因素導致程序不能正常運行。

在設計演算法時,往往對演算法的正常邏輯處理流程設計得比較准確,對異常情況的處理反而不容易設計全面,導致程序在出現異常情況時崩潰。如果軟體出現這種情況會給用戶帶來極不友好的體驗。

例如:試設計一個程序,運行後提示用戶輸入兩個整數。兩個整數用空格隔開,用戶輸入後,程序顯示出兩個數字的和。這個程序正常的邏輯處理非常簡單,但普用戶輸入的兩個字元串不是整數,程序應該給出提示,否則程序有可能會崩潰。因此針對異常情況的處理也是非常重要的,當然有時這種處理會比較復雜。

② C 或Java中的異常處理機制的簡單原理和應用

Java異常處理機制的詳解和使用技巧

1. 異常機制
1.1
異常機制是指當程序出現錯誤後,程序如何處理。具體來說,異常機制提供了程序退出的安全通道。當出現錯誤後,程序執行的流程發生改變,程序的控制權轉移到異常處理器。
1.2
傳統的處理異常的辦法是,函數返回一個特殊的結果來表示出現異常(通常這個特殊結果是大家約定俗稱的),調用該函數的程序負責檢查並分析函數返回的結果。這樣做有如下的弊端:例如函數返回-1代表出現異常,但是如果函數確實要返回-1這個正確的值時就會出現混淆;可讀性降低,將程序代碼與處理異常的代碼混爹在一起;由調用函數的程序來分析錯誤,這就要求客戶程序員對庫函數有很深的了解。
1.3 異常處理的流程
1.3.1 遇到錯誤,方法立即結束,並不返回一個值;同時,拋出一個異常對象
1.3.2 調用該方法的程序也不會繼續執行下去,而是搜索一個可以處理該異常的異常處理器,並執行其中的代碼
2 異常的分類
2.1 異常的分類
2.1.1
異常的繼承結構:基類為Throwable,Error和Exception繼承Throwable,RuntimeException和IOException等繼承Exception,具體的RuntimeException繼承RuntimeException。
2.1.2
Error和RuntimeException及其子類成為未檢查異常(unchecked),其它異常成為已檢查異常(checked)。
2.2 每個類型的異常的特點
2.2.1 Error體系
Error類體系描述了Java運行系統中的內部錯誤以及資源耗盡的情形。應用程序不應該拋出這種類型的對象(一般是由虛擬機拋出)。如果出現這種錯誤,除了盡力使程序安全退出外,在其他方面是無能為力的。所以,在進行程序設計時,應該更關注Exception體系。
2.2.2 Exception體系
Exception體系包括RuntimeException體系和其他非RuntimeException的體系
2.2.2.1 RuntimeException
RuntimeException體系包括錯誤的類型轉換、數組越界訪問和試圖訪問空指針等等。處理RuntimeException的原則是:如果出現RuntimeException,那麼一定是程序員的錯誤。例如,可以通過檢查數組下標和數組邊界來避免數組越界訪問異常。
2.2.2.2 其他(IOException等等)
這類異常一般是外部錯誤,例如試圖從文件尾後讀取數據等,這並不是程序本身的錯誤,而是在應用環境中出現的外部錯誤。
2.3 與C++異常分類的不同
2.3.1
其實,Java中RuntimeException這個類名起的並不恰當,因為任何異常都是運行時出現的。(在編譯時出現的錯誤並不是異常,換句話說,異常就是為了解決程序運行時出現的的錯誤)。
2.3.2
C++中logic_error與Java中的RuntimeException是等價的,而runtime_error與Java中非RuntimeException類型的異常是等價的。
3 異常的使用方法
3.1 聲明方法拋出異常
3.1.1 語法:throws(略)
3.1.2 為什麼要聲明方法拋出異常?
方法是否拋出異常與方法返回值的類型一樣重要。假設方法拋出異常確沒有聲明該方法將拋出異常,那麼客戶程序員可以調用這個方法而且不用編寫處理異常的代碼。那麼,一旦出現異常,那麼這個異常就沒有合適的異常控制器來解決。
3.1.3 為什麼拋出的異常一定是已檢查異常?
RuntimeException與Error可以在任何代碼中產生,它們不需要由程序員顯示的拋出,一旦出現錯誤,那麼相應的異常會被自動拋出。而已檢查異常是由程序員拋出的,這分為兩種情況:客戶程序員調用會拋出異常的庫函數(庫函數的異常由庫程序員拋出);客戶程序員自己使用throw語句拋出異常。遇到Error,程序員一般是無能為力的;遇到RuntimeException,那麼一定是程序存在邏輯錯誤,要對程序進行修改(相當於調試的一種方法);只有已檢查異常才是程序員所關心的,程序應該且僅應該拋出或處理已檢查異常。
3.1.4
注意:覆蓋父類某方法的子類方法不能拋出比父類方法更多的異常,所以,有時設計父類的方法時會聲明拋出異常,但實際的實現方法的代碼卻並不拋出異常,這樣做的目的就是為了方便子類方法覆蓋父類方法時可以拋出異常。
3.2 如何拋出異常
3.2.1 語法:throw(略)
3.2.2 拋出什麼異常?
對於一個異常對象,真正有用的信息時異常的對象類型,而異常對象本身毫無意義。比如一個異常對象的類型是ClassCastException,那麼這個類名就是唯一有用的信息。所以,在選擇拋出什麼異常時,最關鍵的就是選擇異常的類名能夠明確說明異常情況的類。
3.2.3
異常對象通常有兩種構造函數:一種是無參數的構造函數;另一種是帶一個字元串的構造函數,這個字元串將作為這個異常對象除了類型名以外的額外說明。
3.2.4
創建自己的異常:當Java內置的異常都不能明確的說明異常情況的時候,需要創建自己的異常。需要注意的是,唯一有用的就是類型名這個信息,所以不要在異常類的設計上花費精力。
3.3 捕獲異常
如果一個異常沒有被處理,那麼,對於一個非圖形界面的程序而言,該程序會被中止並輸出異常信息;對於一個圖形界面程序,也會輸出異常的信息,但是程序並不中止,而是返回用Ы緱媧�硌�分小?BR> 3.3.1 語法:try、catch和finally(略)
控制器模塊必須緊接在try塊後面。若擲出一個異常,異常控制機制會搜尋參數與異常類型相符的第一個控制器隨後它會進入那個catch
從句,並認為異常已得到控制。一旦catch 從句結束對控制器的搜索也會停止。
3.3.1.1 捕獲多個異常(注意語法與捕獲的順序)(略)
3.3.1.2 finally的用法與異常處理流程(略)
3.3.2 異常處理做什麼?
對於Java來說,由於有了垃圾收集,所以異常處理並不需要回收內存。但是依然有一些資源需要程序員來收集,比如文件、網路連接和圖片等資源。
3.3.3 應該聲明方法拋出異常還是在方法中捕獲異常?
原則:捕捉並處理哪些知道如何處理的異常,而傳遞哪些不知道如何處理的異常
3.3.4 再次拋出異常
3.3.4.1 為什麼要再次拋出異常?
在本級中,只能處理一部分內容,有些處理需要在更高一級的環境中完成,所以應該再次拋出異常。這樣可以使每級的異常處理器處理它能夠處理的異常。
3.3.4.2 異常處理流程
對應與同一try塊的catch塊將被忽略,拋出的異常將進入更高的一級。
4 關於異常的其他問題
4.1 過度使用異常
首先,使用異常很方便,所以程序員一般不再願意編寫處理錯誤的代碼,而僅僅是簡簡單單的拋出一個異常。這樣做是不對的,對於完全已知的錯誤,應該編寫處理這種錯誤的代碼,增加程序的魯棒性。另外,異常機制的效率很差。
4.2 將異常與普通錯誤區分開
對於普通的完全一致的錯誤,應該編寫處理這種錯誤的代碼,增加程序的魯棒性。只有外部的不能確定和預知的運行時錯誤才需要使用異常。
4.3 異常對象中包含的信息
一般情況下,異常對象唯一有用的信息就是類型信息。但使用異常帶字元串的構造函數時,這個字元串還可以作為額外的信息。調用異常對象的getMessage()、toString()或者printStackTrace()方法可以分別得到異常對象的額外信息、類名和調用堆棧的信息。並且後一種包含的信息是前一種的超集。

③ JAVA語言如何進行異常處理

Java通過面向對象的方法進行異常處理,把各種不同的異常進行分類,並提供了良好的介面。在Java中,每個異常都是一個對象,它是Throwable類或其它子類的實例。當一個方法出現異常後便拋出一個異常對象,該對象中包含有異常信息,調用這個對象的方法可以捕獲到這個異常並進行處理。Java的異常處理是通過5個關鍵詞來實現的:try、catch、throw、throws和finally。一般情況下是用try來執行一段程序,如果出現異常,系統會拋出(throws)一個異常,這時候你可以通過它的類型來捕捉(catch)它,或最後(finally)由預設處理器來處理。 用try來指定一塊預防所有異常的程序。緊跟在try程序後面,應包含一個catch子句來指定你想要捕捉的異常的類型。 throw語句用來明確地拋出一個異常。 throws用來標明一個成員函數可能拋出的各種異常。 可以在一個成員函數調用的外面寫一個try語句,在這個成員函數內部寫另一個try語句保護其他代碼。每當遇到一個try語句,異常的框架就放到堆棧上面,直到所有的try語句都完成。

④ JAVA語言如何進行異常處理

throws捕獲並向外拋出異常
throw拋出異常
try catch是內部捕獲異常並做自定義處理
finally是無論是否有異常都會被處理的語句,除非在finally前存在被執行的System.exit(int i)時除外

⑤ 玉溪電腦培訓學校告訴你Java中異常與錯誤的處理方法

Java中的異常處理機制已經比較成熟,我們的Java程序到處充滿了異常的可能,如果對這些異常不做預先的處理,那麼將來程序崩潰就無從調試,很難找到異常所在的位置。玉溪電腦培訓http://www.kmbdqn.cn/將探討一下Java中異常與錯誤的處理方法,一起來看看。



異常與錯誤:


異常:


在Java中程序的錯誤主要是語法錯誤和語義錯誤,一個程序在編譯和運行時出現的錯誤我們統一稱之為異常,它是VM(虛擬機)通知你的一種方式,通過這種方式,VM讓你知道,你(開發人員)已經犯了個錯誤,現在有一個機會來修改它。Java中使用異常類來表示異常,不同的異常類代表了不同的異常。但是在Java中所有的異常都有一個基類,叫做Exception。


錯誤:


它指的是一個合理的應用程序不能截獲的嚴重的問題。大多數都是反常的情況。錯誤是VM的一個故障(雖然它可以是任何系統級的服務)。所以,錯誤是很難處理的,一般的開發人員(當然不是你)是無法處理這些錯誤的,比如內存溢出。和異常一樣,在Java中用錯誤類來表示錯誤,不同的錯誤類代表了不同的錯誤。但是在Java中所有的錯誤都有一個基類,叫做Error。


綜上,我們可以知道異常和錯誤最本質的區別就是異常能被開發人員處理而錯誤時系統本來自帶的,一般無法處理也不需要我們程序員來處理。


1.一個異常是在一個程序執行過程中出現的一個事件,它中斷了正常指令的運行


2.錯誤,偏離了可接受的代碼行為的一個動作或實例


異常的結構分類:


1、運行時異常(未檢查異常)


2、編譯時異常(已檢查異常)


運行異常即是RuntimeException;其餘的全部為編譯異常


在Java中異常Exception和錯誤Error有個共同的父類Throwable。


ErrorException


runtimeException幾個子類


1、java.lang.


數組索引越界異常。當對數組的索引值為負數或大於等於數組大小時拋出。


2、java.lang.ArithmeticException


算術條件異常。譬如:整數除零等。


3、java.lang.NullPointerException


空指針異常。當應用試圖在要求使用對象的地方使用了null時,拋出該異常。譬如:調用null對象的實例方法、訪問null對象的


屬性、計算null對象的長度、使用throw語句拋出null等等


4、java.lang.ClassNotFoundException


找不到類異常。當應用試圖根據字元串形式的類名構造類,而在遍歷CLASSPAH之後找不到對應名稱的class文件時,拋出


該異常。


⑥ SSH開發的java web項目如何處理拋出的異常

在struts.xml中配置全局異常處理,例如

  • <!--定義全局的result結果-->

  • <global-results>

  • <resultname="exceptionRsult1"type="redirect">/exception1.jsp</result>

  • </global-results>

  • <!--定義全局異常映射處理-->

  • <global-exception-mappings>

  • <exception-mappingresult="exceptionRsult1"exception="java.lang.Exception"></exception-mapping>

  • </global-exception-mappings>

⑦ java異常處理存在的意義是什麼

對於代碼執行過程中,產生的異常。如果不捕獲處理,程序代碼默認會拋給調用層,如果調用層也未對異常做處理,那麼這個異常會一直往外拋出去,有可能直接將這些信息展現給使用的用戶。使用的用戶看到這些信息根本無法理解出現了什麼錯誤,很有可能會誤以為系統崩潰。
在代碼中做異常處理,可以保證程序運行時,如果產生異常,可以將底層的異常信息捕獲到,轉換為用戶可以接受,或者能看懂的信息,比如說:當前處理有錯誤。等等這類用戶可以理解的信息,而不是程序開發的代碼底層信息。這樣使用的用戶可以根據提示重新操作。
Java代碼中,有些類型轉換、資料庫連接、文件讀取等等操作,異常發生時,不會導致系統崩潰,但有必要讓操作用戶按照正常流程來操作,通過異常處理來反饋給操作用戶。
以上,就是我自己在Java開發過程中,自己的理解和總結,如果有誤,還望多多諒解,多多包含。

⑧ Java中異常與錯誤的處理方法

Java中的異常處理機制已經比較成熟,我們的Java程序到處充滿了異常的可能,如果對這些異常不做預先的處理,那麼將來程序崩潰就無從調試,很難找到異常所在的位置。雲南電腦培訓http://www.kmbdqn.cn/將探討一下Java中異常與錯誤的處理方法,一起來看看。



異常與錯誤:


異常:


在Java中程序的錯誤主要是語法錯誤和語義錯誤,一個程序在編譯和運行時出現的錯誤我們統一稱之為異常,它是VM(虛擬機)通知你的一種方式,通過這種方式,VM讓你知道,你(開發人員)已經犯了個錯誤,現在有一個機會來修改它。Java中使用異常類來表示異常,不同的異常類代表了不同的異常。但是在Java中所有的異常都有一個基類,叫做Exception。


錯誤:


它指的是一個合理的應用程序不能截獲的嚴重的問題。大多數都是反常的情況。錯誤是VM的一個故障(雖然它可以是任何系統級的服務)。所以,錯誤是很難處理的,一般的開發人員(當然不是你)是無法處理這些錯誤的,比如內存溢出。和異常一樣,在Java中用錯誤類來表示錯誤,不同的錯誤類代表了不同的錯誤。但是在Java中所有的錯誤都有一個基類,叫做Error。


綜上,我們可以知道異常和錯誤最本質的區別就是異常能被開發人員處理而錯誤時系統本來自帶的,一般無法處理也不需要我們程序員來處理。


1.一個異常是在一個程序執行過程中出現的一個事件,它中斷了正常指令的運行


2.錯誤,偏離了可接受的代碼行為的一個動作或實例


異常的結構分類:


1、運行時異常(未檢查異常)


2、編譯時異常(已檢查異常)


運行異常即是RuntimeException;其餘的全部為編譯異常


在Java中異常Exception和錯誤Error有個共同的父類Throwable。


ErrorException


runtimeException幾個子類


1、java.lang.


數組索引越界異常。當對數組的索引值為負數或大於等於數組大小時拋出。


2、java.lang.ArithmeticException


算術條件異常。譬如:整數除零等。


3、java.lang.NullPointerException


空指針異常。當應用試圖在要求使用對象的地方使用了null時,拋出該異常。譬如:調用null對象的實例方法、訪問null對象的


屬性、計算null對象的長度、使用throw語句拋出null等等


4、java.lang.ClassNotFoundException


找不到類異常。當應用試圖根據字元串形式的類名構造類,而在遍歷CLASSPAH之後找不到對應名稱的class文件時,拋出


該異常。


熱點內容
v9更新到91有方舟編譯器嗎 發布:2025-01-16 00:11:49 瀏覽:498
AB系統編程 發布:2025-01-16 00:09:37 瀏覽:619
存儲過程如何遍歷一個表的數據 發布:2025-01-16 00:08:34 瀏覽:873
apkso反編譯 發布:2025-01-15 23:53:20 瀏覽:5
買的騰訊伺服器是裝在電腦上嗎 發布:2025-01-15 23:25:58 瀏覽:411
如何查看電腦的配置是不是i5 發布:2025-01-15 23:24:21 瀏覽:434
PI資料庫 發布:2025-01-15 23:14:42 瀏覽:882
我的世界手機版暖心伺服器 發布:2025-01-15 23:05:02 瀏覽:169
xts壓縮比 發布:2025-01-15 23:02:41 瀏覽:424
怎麼看聯系人存儲位置 發布:2025-01-15 22:47:14 瀏覽:794