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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

java中异常处理机制

發布時間:2025/3/20 编程问答 14 豆豆
生活随笔 收集整理的這篇文章主要介紹了 java中异常处理机制 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

文章目錄

  • 一 認識常見異常
    • 1 除0異常(算術異常)
    • 2 數組越界異常
    • 3 空指針異常
  • 二 異常的體系
  • 三 異常的用法(try-catch語句)
    • 1概述與代碼理解
    • 2 注意事項
    • 3 finally語句
    • 4 異常的傳遞
    • 5 throw與throws關鍵字
  • 四 自定義異常
    • 注意事項
  • 結語

一 認識常見異常

在你所寫過的代碼中,你已經接觸過一些異常了,我們可以通過一些簡單的代碼讓我們理解一些簡單的異常

1 除0異常(算術異常)

public class winning {public static void main(String[] args) {System.out.println(10/0);} }

我們都知道0是不能作為除數的,那么在這里作為除數運行之后結果如下:

畫出圈的地方就是我們異常的一個種類,稱為算術異常

2 數組越界異常

public class winning {public static void main(String[] args) {int[] array = {1,2,3};System.out.println(array[4]);} }

運行結果:

3 空指針異常

public class winning {public static void main(String[] args) {int[] array = null;System.out.println(array[0]);} }

運行結果:

二 異常的體系


Exception是我們所有異常的父類,其中Error以及RuntimeException是我們平時所說的一個非受查異常(運行時異常),其他的異常為受查異常(編譯時異常),前面介紹的幾種常見的異常,就是RuntimeException的子類。
對于這些異常的處理,我們建議統一利用try-catch去處理,而且catch處理異常時,如果有父子類的異常,我們應該要遵循先寫子類的異常,在寫父類的異常。

三 異常的用法(try-catch語句)

1概述與代碼理解

1 對于編寫了一段代碼,如果其中的一行發生了異常,那么之后的語句就不再執行(這是因為沒有自己處理異常,那么就會交給JVM來處理)
2 對于使用try-catch語句來處理異常,把有可能出現異常的語句放在try中,如果try語句中的一行發生了異常,那么try語句中的下一行將不執行,但不影響后面的語句執行
3 對于try-catch語句,catch后面要跟著異常的類型,以及要相對應的定義一個變量。

public class winning {public static void main(String[] args) {try {int[] array = null;System.out.println(array[0]);System.out.println("abc");}catch(NullPointerException e){//打印出異常的調用棧e.printStackTrace();System.out.println("捕獲到空指針異常了");}System.out.println("執行了");} }

運行結果:

2 注意事項

1 try-catch語句不能單獨使用,必須聯合起來處理異常
2 可以有多個catch,但不能有多個try
3 catch中可以寫多個異常的類型,類型之間需要利用|隔開,但是變量必須定義到所寫的最后一個類型的后面(也就是變量只能定義一個),但我們并不推薦這種寫法,最好就是一種類型對應一個catch
4 catch中如果沒有對應的異常類型,那么此時就會交給jvm去處理( catch 只能處理對應種類的異常)

3 finally語句

finally語句表示的是表示的善后工作,釋放資源

public class winning {public static void main(String[] args) {try {int[] array = null;System.out.println(array[0]);System.out.println("abc");}catch(NullPointerException e){e.printStackTrace();System.out.println("捕獲到空指針異常了");}finally {System.out.println("釋放資源");}} }

1 其實無論是否存在異常, finally 中的代碼一定都會執行到,確保資源可以釋放
2 finally語句是按情況寫與不寫,不是一定要有才能處理異常
3 使用的過程中,要按照try-catch-finally的順序
利用try負責回收資源(了解)

此時我們可以把鼠標放到try這個關鍵字上,按下alt + enter,此時就有

這樣子就相當于交由try來負責回收了,但這并不代表每一個異常都可以,只要是try在IDEA中報出了警告,我們可以嘗試利用這樣的一種快捷鍵讓try去負責回收
finally注意事項

public class winning {public static void main(String[] args) {System.out.println(func());}public static int func(){try {return 20;}catch (NullPointerException e){e.printStackTrace();}finally {return 30;}} }

運行結果:

30

如果try語句中有返回值,以及finally語句中也有返回值,那么此時將會返回finally語句中的返回值,我們寫代碼的時候,不要使用這種寫法(try與finally中同時擁有返回值)。

4 異常的傳遞

異常是會隨著調用棧的調用而傳遞

public class winning {public static void main(String[] args) {try {func();}catch (ArrayIndexOutOfBoundsException e){e.printStackTrace();}}public static void func(){int[] array = {1,2,3,4};System.out.println(array[29]);} }

運行結果:

如果向上傳遞的沒有合適的方法處理異常,那么就會返回看上一個調用它的有沒有合適的方法處理異常,一直到main中也沒有合適的處理異常的方法,那么就只能由jvm來處理了

5 throw與throws關鍵字

對于throw關鍵字,我們可以通過這個關鍵字手動拋出異常

public class winning {public static void main(String[] args) {try {func(0);}catch (ArrayIndexOutOfBoundsException e){e.printStackTrace();}}public static void func(int a){if (a==0){throw new NullPointerException("空指針異常了");}} }


throws 主要是用來提醒調用者,調用該方法可能會出現那些異常,需要進行處理

四 自定義異常

Java 中雖然已經內置了豐富的異常類, 但是我們實際場景中可能還有一些情況需要我們對異常類進行擴展, 創建符合我們實際情況的異常.
我們可以通過一個例子來說明一下:模擬用戶登錄,此時就可能拋出兩種異常,一種是用戶名錯誤異常,一種是密碼錯誤異常:
我們先寫出一段模擬登錄的代碼

public class winning {private static final String ID ="java";private static final String Password = "666";public static void main(String[] args) {System.out.println("請輸入你的用戶名");Scanner scanner=new Scanner(System.in);String name = scanner.nextLine();System.out.println("請輸入你的密碼");String password = scanner.nextLine();} }

定義拋出用戶名錯誤的異常類

//定義一個用戶名異常 class NameException extends RuntimeException{public NameException(String name){super(name);} }

定義拋出密碼錯誤的異常

//定義一個密碼異常 class PasswordException extends RuntimeException{public PasswordException(String password){super(password);} }

我們在進一步完善我們異常處理機制:

public class winning {private static final String ID ="java";private static final String Password = "666";public static void main(String[] args) {System.out.println("請輸入你的用戶名");Scanner scanner=new Scanner(System.in);String name = scanner.nextLine();System.out.println("請輸入你的密碼");String password = scanner.nextLine();if (!ID.equals(name)){throw new NameException("用戶名錯了");}if (!Password.equals(password)){throw new PasswordException("密碼有誤");}} }

通過這個例子,讓我們了解什么是自定義異常類,如何使用異常類,當然以上代碼可以進行優化,可以利用設置一個login登錄函數,在利用try-catch進行捕獲異常。

注意事項

對于自定義異常類:
1 一定要繼承一個異常類(通常為Exception或者RunException)
2 繼承Exception說明該類是可受查的
3 繼承RunException說明該類是非受查類

結語

關于異常的認識,其實并沒有像其他語法一樣難理解,如果對你理解異常這一塊也有幫助,別忘了給博主點個👍👍哦,之后的學習將會更新一些數據結構的知識!!

總結

以上是生活随笔為你收集整理的java中异常处理机制的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。