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

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程语言 > java >内容正文

java

解释java程序中的异常机制_Java编程中的异常机制

發(fā)布時(shí)間:2023/12/1 java 55 豆豆
生活随笔 收集整理的這篇文章主要介紹了 解释java程序中的异常机制_Java编程中的异常机制 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

本文旨在以初學(xué)者的角度來(lái)學(xué)習(xí)Java異常的知識(shí),盡量簡(jiǎn)單,一些細(xì)枝末節(jié)的知識(shí)不會(huì)講述,但不影響對(duì)知識(shí)的掌握。

(比如try-catch可以嵌套,不太會(huì)這么用)

1.什么是異常

我們先舉個(gè)例子

int x = 10/0;

在IDE里輸入這樣一個(gè)statement,靜態(tài)檢查沒(méi)有發(fā)現(xiàn)其錯(cuò)誤。運(yùn)行后發(fā)現(xiàn)拋出算數(shù)類異常。

Exception in thread "main" java.lang.ArithmeticException: /by zero

“異常”可以理解為字面意思,通常指正常情況無(wú)法處理的異常事件。

不過(guò)異常和錯(cuò)誤不同,程序員無(wú)法處理error,如VirtualMachineError、OutOfMemoryError,而Exception本身可以被程序解決,如NullPointException、ArithmeticException、ArrayIndexOutOfBoundException

異常與錯(cuò)誤都繼承了Throwable類,整體關(guān)系如下圖:

Exception,大致可以分為兩類

  • RuntimeException 運(yùn)行時(shí)異常 不可檢查
  • OtherException 編譯期異常 可檢查

程序員最需要的關(guān)心的:

    • 不是Error,因?yàn)榇蟛糠钟龅搅司妥哉J(rèn)倒霉束手無(wú)策
    • 不是RuntimeException,根本不可查
    • 而是OtherException,可查異常;可以通過(guò)try-catch捕獲異常,或者在方法上加throws拋出異常等

2.異常處理機(jī)制

上面談到對(duì)于OtherException可查異常可以try-catch捕獲,或者throws拋出異常。接下來(lái)就詳細(xì)介紹如何使用

2.1 try-catch

try {//可能發(fā)生異常的地方} catch (RuntimeException e1){// runtimeException} catch (Exception e2){//Exception} finally {//finally的內(nèi)容一定會(huì)執(zhí)行:無(wú)論有沒(méi)有Exception}

try-catch中可以有多個(gè)catch,處理時(shí)將依次匹配,注意是依次依次依次,重要的事情說(shuō)三遍!,一旦先匹配上了,后面的catch就不再匹配,程序員需當(dāng)心順序(這里有什么技巧,歡迎大佬補(bǔ)充)

2.2 拋出異常

使用方法:比如有一個(gè)靜態(tài)方法a,在方法名后添加throws IOException(這是一個(gè)可檢查異常),那么在調(diào)用它時(shí),作為一個(gè)可檢查異常,那么必須要對(duì)它try-catch的。如果像下面這樣沒(méi)有try-catch,會(huì)出現(xiàn)什么情況呢?

public class Main {public static void a() throws IOException{System.out.println("a");}public static void main(String[] args){a();} }

根據(jù)第一節(jié)可知,可檢查異常是編譯期異常,我使用的工具Intellij IDEA就會(huì)報(bào)錯(cuò),不讓我通過(guò)。只要給它套上一層外衣就好了:

try {a();} catch (IOException e){//do something}

catch里的Exception類一定要和方法拋出的類是同一個(gè)類,或者有從屬關(guān)系(如IOException是Exception的子類)

有一個(gè)有趣的問(wèn)題,之前我說(shuō)過(guò)只有可檢查類有拋出異常的必要,如果我throws一個(gè)不可檢查的異常會(huì)發(fā)生什么呢?

public class Main {public static void a() throws RuntimeException{System.out.println("a");}public static void main(String[] args){a();} }

我在這里先不說(shuō)結(jié)果,感興趣的小伙伴可以自己嘗試一下。(不理解結(jié)果的,可以私信我)

注意:throws與throw的區(qū)別

我的理解是,

  • throws只是一個(gè)保障機(jī)制,要求可檢查異常必須得到檢查。至于是不是真的拋出了異常,還一定。
  • throw才是真正的拋出異常,就算有時(shí)候方法沒(méi)有聲明throws(不過(guò)建議寫(xiě),可讀性高)。

另外,Java自定義異常類的原理類似,都派生自Exception或某個(gè)更小的Exception,有空單獨(dú)寫(xiě)一篇自定義類的常見(jiàn)用法和注意事項(xiàng)。

總結(jié)

以上是生活随笔為你收集整理的解释java程序中的异常机制_Java编程中的异常机制的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

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