當前位置:首頁 » 編程語言 » java的異常機制

java的異常機制

發布時間: 2025-06-18 17:44:24

java中的異常處理機制的簡單原理和應用。

異常是指java程序運行時(非編譯)所發生的非正常情況或錯誤,與現實生活中的事件很相似,現實生活中的事件可以包含事件發生的時間、地點、人物、情節等信息,可以用一個對象來表示,Java使用面向對象的方式來處理異常,它把程序中發生的每個異常也都分別封裝到一個對象來表示的,該對象中包含有異常的信息。
Java對異常進行了分類,不同類型的異常分別用不同的Java類表示,所有異常的根類為java.lang.Throwable,Throwable下面又派生了兩個子類:Error和Exception,Error 表示應用程序本身無法克服和恢復的一種嚴重問題,程序只有死的份了,例如,說內存溢出和線程死鎖等系統問題。Exception表示程序還能夠克服和恢復的問題,其中又分為系統異常和普通異常,系統異常是軟體本身缺陷所導致的問題,也就是軟體開發人員考慮不周所導致的問題,軟體使用者無法克服和恢復這種問題,但在這種問題下還可以讓軟體系統繼續運行或者讓軟體死掉,例如,數組腳本越界(),空指針異常(NullPointerException)、類轉換異常(ClassCastException);普通異常是運行環境的變化或異常所導致的問題,是用戶能夠克服的問題,例如,網路斷線,硬碟空間不夠,發生這樣的異常後,程序不應該死掉。
java為系統異常和普通異常提供了不同的解決方案,編譯器強制普通異常必須try..catch處理或用throws聲明繼續拋給上層調用方法處理,所以普通異常也稱為checked異常,而系統異常可以處理也可以不處理,所以,編譯器不強制用try..catch處理或用throws聲明,所以系統異常也稱為unchecked異常。

提示答題者:就按照三個級別去思考:虛擬機必須宕機的錯誤,程序可以死掉也可以不死掉的錯誤,程序不應該死掉的錯誤;

❷ Java中的異常處理機制的簡單原理和應用。

Java中的異常處理機制的簡單原理和應用 :

java中Throwable這個類可以被作為異常拋出的類,繼承它的分為異常Exception和錯誤Error.

Exception表示程序需要捕捉和處理的的異常;

Error表示系統級別的錯誤和程序無需處理的。

我們所需要關心的是Exception. Execption可以分為java標準定義的異常和程序員自定義異常2種.

(1)一種是當程序違反了java語規則的時候,JAVA虛擬機就會將發生的錯誤表示為一個異常.這里語法規則指的是JAVA類庫內置的語義檢查。

(2)另一種情況就是JAVA允許程序員擴展這種語義檢查,程序員可以創建自己的異常,並自由選擇在何時用throw關鍵字引發異常。所有的異常都是Thowable的子類。

異常處理是與程序執行是並行的.

Try{

//可能發現異常的語句塊

}catch(異常類型,e){

//發生異常時候的執行語句塊

}finnally{

//不管是否發生異常都執行的語句塊

}

以下是一個自定義異常測試類:

packagecode;

{
publicvoidf()
{
System.out.println("thisismyException!!");
}
}
publicclassExceptionTestTwo{
privateinti=0;
privateintj;
ExceptionTestTwo(intx)throwsMyException
{
f2();
j=x/i;
}
publicvoidf2()throwsMyException
{
System.out.println("thisisMyfirstException!!");
thrownewMyException();
}
publicstaticvoidmain(String[]args)
{
try{
newExceptionTestTwo(9);
}catch(MyExceptione2){
e2.f();
}catch(Exceptione){
e.printStackTrace();
}finally{
System.out.println("FinallyisfirstException!!");
}
try{
thrownewMyException();
}catch(MyExceptione1){
e1.f();
}finally{
System.out.println("FinallyissecondException!!");
}
}
}

❸ java拋出異常

Java拋出異常是使用「throw」關鍵字來主動告知調用者出現了問題的一種機制。以下是關於Java拋出異常的詳細解釋:

  1. 異常的基本概念

    • 在Java中,異常是程序在執行過程中出現的錯誤或意外情況。
    • 這些異常會打斷程序的正常執行流程。
    • Java提供了異常處理機制來處理這些異常情況。
  2. 拋出異常的語法

    • 當程序檢測到某種特定問題時,可以使用「throw」關鍵字拋出一個異常。
    • 拋出的異常可以是已檢查的異常或未檢查的異常。
    • 拋出異常的語法通常為:throw new 異常類型;。例如,throw new IOException;。
  3. 異常的處理

    • Java使用trycatch語句塊來處理拋出的異常。
    • try塊中放置可能拋出異常的代碼。
    • catch塊用於捕獲並處理異常,如果try塊中的代碼拋出異常,程序會立即跳轉到相應的catch塊進行處理。
    • 此外,還有finally塊,用於執行一些清理工作,如關閉文件流等,無論是否發生異常,finally塊中的代碼都會執行。

掌握Java的異常處理機制對於提高程序的健壯性和可靠性至關重要,也是成為一名合格Java程序員所必需的技能之一。

❹ 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異常處理的throws

熱點內容
phpunicode轉換中文 發布:2025-06-18 22:21:23 瀏覽:64
按鍵精靈腳本返回值是數組 發布:2025-06-18 22:19:04 瀏覽:136
Ce腳本怎麼 發布:2025-06-18 22:06:01 瀏覽:300
python的功能 發布:2025-06-18 22:00:12 瀏覽:435
多端框架的編譯原理 發布:2025-06-18 21:50:33 瀏覽:833
亳州php 發布:2025-06-18 21:46:03 瀏覽:136
cnckad編程具體操作法 發布:2025-06-18 21:40:20 瀏覽:25
bios怎麼設密碼 發布:2025-06-18 21:29:17 瀏覽:625
虛擬伺服器怎麼看伺服器型號 發布:2025-06-18 21:28:33 瀏覽:789
表格的密碼如何設置 發布:2025-06-18 21:28:18 瀏覽:372