日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

JAVA知识基础(十一):异常

發(fā)布時間:2025/3/8 编程问答 13 豆豆
生活随笔 收集整理的這篇文章主要介紹了 JAVA知识基础(十一):异常 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

1.異常的概念

簡單說就是不正常運(yùn)行,最終導(dǎo)致JVM的非正常停止。

在Java等面向?qū)ο蟮木幊陶Z言中,異常本身是一個類,產(chǎn)生異常就是創(chuàng)建異常對象并拋出了一個異常對象。Java處理異常的方式是中斷處理。

異常指的并不是語法錯誤,語法錯了,編譯不通過,不會產(chǎn)生字節(jié)碼文件,根本不能運(yùn)行。

2.異常體系

異常機(jī)制其實是幫助我們找到程序中的問題,異常的根類是java.lang.Throwable,其下有兩個子類:java.lang.Error與java.lang.Exception,平常所說的異常指java.lang.Exception。

Throwable中的常用方法:
1、 public void printStackTrace():打印異常的詳細(xì)信息。
包含了異常的類型,異常的原因,還包括異常出現(xiàn)的位置,在開發(fā)和調(diào)試階段,都得使用printStackTrace。
2、 public String getMessage():獲取發(fā)生異常的原因。
提示給用戶的時候,就提示錯誤原因。
3、public String toString():獲取異常的類型和異常描述信息(不用)。

出現(xiàn)異常,最簡單的方式就是把異常的簡單類名,拷貝到API中去查。

3 .異常分類

我們平常說的異常就是指Exception,因為這類異常一旦出現(xiàn),我們就要對代碼進(jìn)行更正,修復(fù)程序。

異常(Exception)的分類:根據(jù)在編譯時期還是運(yùn)行時期去檢查異常?

編譯時期異常:checked異常。在編譯時期,就會檢查,如果沒有處理異常,則編譯失敗。(如日期格式化異常)
運(yùn)行時期異常:runtime異常。在運(yùn)行時期,檢查異常.在編譯時期,運(yùn)行異常不會編譯器檢測(不報錯)。(如數(shù)學(xué)異常)

編譯時異常和程序的上下文條件有著密切關(guān)系,即使程序設(shè)計無誤也會由于使用問題而引發(fā)。Java編譯器要求方法必須聲明拋出可能發(fā)生的編譯時異常,但是并不要求必須聲明拋出未被捕獲的運(yùn)行時異常

4.異常的處理

Java異常處理的五個關(guān)鍵字:try、catch、finally、throw、throws

4.1拋出異常throw
在編寫程序時,作為一個優(yōu)秀的程序員必須要考慮程序出現(xiàn)問題的情況。舉個栗子,在定義方法時,方法需要接受參數(shù)。那么,當(dāng)調(diào)用方法使用接受到的參數(shù)時,首先需要先對參數(shù)數(shù)據(jù)進(jìn)行合法的判斷,數(shù)據(jù)若不合法,就應(yīng)該告訴調(diào)用者,傳遞合法的數(shù)據(jù)進(jìn)來。這時需要使用拋出異常的方式來告訴調(diào)用者。這個時候throw就派上用場了!

在java中,提供了一個throw關(guān)鍵字,Throw用來拋出一個指定的異常對象。從而可以
1、創(chuàng)建一個異常對象。封裝一些提示信息(信息可以自己編寫)。
2、通過關(guān)鍵字throw就可以將這個異常對象告知給調(diào)用者,還可以將這個異常對象傳遞到調(diào)用者處。

throw小結(jié)
throw用在方法內(nèi),后面接一個異常對象,使用格式為throw new 異常類名(參數(shù));,將這個異常對象傳遞到調(diào)用者處,并結(jié)束當(dāng)前方法的執(zhí)行。

throw使用的格式如下:

throw new NullPointerException("要訪問的arr數(shù)組不存在") throw new ArrayIndexOutOfBoundsException("該索引在數(shù)組中不存在,已超出范圍");

4.2聲明異常throws
如果產(chǎn)生了問題,我們就會throw將問題描述類即異常進(jìn)行拋出,也就是將問題返回給該方法的調(diào)用者。

那么對于調(diào)用者來說,該怎么處理呢?一種是進(jìn)行捕獲處理,另一種就是繼續(xù)講問題聲明出去,使用throws聲明處理。

聲明異常:將問題標(biāo)識出來,報告給調(diào)用者。如果方法內(nèi)通過throw拋出了編譯時異常,而沒有捕獲處理(稍后講解該方式),那么必須通過throws進(jìn)行聲明,讓調(diào)用者去處理。

throws小結(jié)
關(guān)鍵字throws運(yùn)用于方法聲明之上,throws格式為修飾符 返回值類型 方法名(參數(shù)) throws 異常類名1,異常類名2…{ },用于表示當(dāng)前方法不處理異常,而是提醒該方法的調(diào)用者來處理異常(拋出異常).

4.3捕獲異常try…catch
如果異常出現(xiàn)的話,會立刻終止程序,所以我們得處理異常:

該方法不處理,而是聲明拋出,由該方法的調(diào)用者來處理(throws)。
在方法中使用try-catch的語句塊來處理異常。
try-catch的方式就是捕獲異常。

捕獲異常:Java中對異常有針對性的語句進(jìn)行捕獲,可以對出現(xiàn)的異常進(jìn)行指定方式的處理。

捕獲異常語法如下:

try{編寫可能會出現(xiàn)異常的代碼 }catch(異常類型 e){處理異常的代碼//記錄日志/打印異常信息/繼續(xù)拋出異常 }

try:該代碼塊中編寫可能產(chǎn)生異常的代碼。
catch:用來進(jìn)行某種異常的捕獲,實現(xiàn)對捕獲到的異常進(jìn)行處理。

注意:try和catch都不能單獨使用,必須連用。

4.4 finally 代碼塊
finally:有一些特定的代碼無論異常是否發(fā)生,都需要執(zhí)行。另外,因為異常會引發(fā)程序跳轉(zhuǎn),導(dǎo)致有些語句執(zhí)行不到。而finally就是解決這個問題的,在finally代碼塊中存放的代碼都是一定會被執(zhí)行的。

什么時候的代碼必須最終執(zhí)行?
當(dāng)我們在try語句塊中打開了一些物理資源(磁盤文件/網(wǎng)絡(luò)連接/數(shù)據(jù)庫連接等),我們都得在使用完之后,最終關(guān)閉打開的資源。

finally的語法:
try…catch…finally:自身需要處理異常,最終還得關(guān)閉資源。

注意:finally不能單獨使用。

比如在IO流中,當(dāng)打開了一個關(guān)聯(lián)文件的資源,最后程序不管結(jié)果如何,都需要把這個資源關(guān)閉掉。

當(dāng)只有在try或者catch中調(diào)用退出JVM的相關(guān)方法,此時finally才不會執(zhí)行,否則finally永遠(yuǎn)會執(zhí)行。

5.常見異常類型

異常解釋
NullPointerException空指針(即引用無具體指向)異常
ClassCastException(強(qiáng)制)類型轉(zhuǎn)換錯誤
ArrayIndexOutOfBoundsException數(shù)組越界錯誤
UnsupportedClassVersionError運(yùn)行JAVA版本不一致
NumberFormatException數(shù)字轉(zhuǎn)換異常
RuntimeException Java.lang包中多數(shù)異常的基類
ClassNotFoundException不能加載請求的類
IOExceptionI/O 異常的根類
FileNotFoundException不能找到文件

6.自定義異常

什么是自定義異常類:在開發(fā)中根據(jù)自己業(yè)務(wù)的異常情況來定義異常類.

自定義一個業(yè)務(wù)邏輯異常: RegisterException。一個注冊異常類。

異常類如何定義:

  • 自定義一個編譯期異常: 自定義類 并繼承于java.lang.Exception。
  • 自定義一個運(yùn)行時期的異常類:自定義類 并繼承于java.lang.RuntimeException。

總結(jié)

以上是生活随笔為你收集整理的JAVA知识基础(十一):异常的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。