?寫在前面
?博客主頁:努力的小鳴人
?系列專欄:Java基礎學習😋
?歡迎小伙伴們,點贊👍關注🔎收藏🍔一起學習!
?如有錯誤的地方,還請小伙伴們指正!🌹
🔥系列傳送門:
【附章2Java面向物件編程】盤點關鍵字詳解 this、super、final
【04章Java面向物件編程(下)】面向物件編程的必殺技
【04章Java面向物件編程(中)】解密 繼承性和多型性
【04章Java面向物件編程(上)】萬事萬物皆物件的初體驗【全站熱榜第二】
【附章1Java陣列中常見演算法】圖文并茂詳解十大排序演算法讓您回味無窮
【03章Java陣列】程式員必看陣列詳解
【02章Java基本語法】詳細講解讓你重新認識Java基本語法和流程流程控制
【01章Java語言概述】Java學了很久了吧,快回來熟悉熟悉吧(詳細)
文章目錄
- 一、例外的概述
- 👌例外
- 👌運行時例外
- 👌編譯時例外
- 二、常見例外
- 三、try-catch-finally
- 四、throws
- 👌重寫方法宣告拋出例外的原則
- 五、throw
- 六、自定義例外類
一、例外的概述
在代碼的運行程序中很多問題不是靠代碼就能夠避免的
Java把例外當做物件來處理,并定義了一個基類 java.lang.Throwable 作為所有例外的超類
👌例外
程式員通常只能處理Exception,而對Error無能為力
- 定義:在Java語言中,將程式執行中發生的不正常情況稱為“例外”
- 分類:
●Error:Java虛擬機無法解決的嚴重問題,如:JVM系統內部錯誤、資源耗盡等嚴重情況,
●Exception: 其它因編程錯誤或偶然的外在因素導致的一般性問題,可以使
用針對性的代碼進行處理,例空指標訪問、陣列角標越界 - Java把例外當做物件來處理,并定義了一個基類 java.lang.Throwable 作為所有例外的超類

👌運行時例外
- 指編譯器不要求強制處置的例外,一般指編程時的邏輯錯誤,是程式員應該積極避免其出現的例外
- java.lang.RuntimeException 類及它的子類都是運行時例外
👌編譯時例外
- 指編譯器要求必須處置的例外,程式在運行時由于外界因素造成的一般性例外
編譯器要求Java程式必須捕獲或宣告所有編譯時例外
二、常見例外
- java.lang.RuntimeException
●ClassCastException:類轉換例外
●ArrayIndexOutOfBoundsException:陣列索引超出范圍例外
●NullPointerException:空指標例外
●ArithmeticException:算術例外
●NumberFormatException:數字格式例外
●InputMismatchException:輸入不匹配例外 - java.io.IOExeption
●FileNotFoundException:檔案未找到例外
●EOFException:檔案結束例外 - java.lang.ClassNotFoundException
:類未找到例外 - java.lang.InterruptedException
:中斷例外 - java.io.FileNotFoundException
:檔案未找到例外 - java.sql.SQLException
:SQL例外
三、try-catch-finally
例外處理機制一
Java提供的是例外處理的抓拋模型
try:捕獲例外的第一步是用try{…}陳述句塊選定捕獲例外的范圍,將可能出現例外的代碼放在try陳述句塊中catch(Exceptiontype e):在catch陳述句塊中是對例外物件進行處理的代碼,每個try陳述句塊可以伴隨一個或多個catch陳述句,用于處理可能產生的不同型別的例外物件finally:捕獲例外的最后一步是通過finally陳述句為例外處理提供一個統一的出口,使得在控制流轉到程式的其它部分以前,能夠對程式的狀態作統一的管理- 不論在try代碼塊中是否發生了例外事件,catch陳述句是否執行,catch陳述句是否有例外,catch陳述句中是否有return,finally塊中的陳述句都會被執行
finally陳述句和catch陳述句是任選的

代碼如下:
public class DivideZero {
int x;
public static void main(String[] args) {
int y;
DivideZero c = new DivideZero();
try {
y = 3 / c.x;
} catch (ArithmeticException e) {
System.out.println("divide by zero error!");
}
System.out.println("program ends ok!");
}
}
運行結果:
java DivideZero
divide by zero error!
program ends ok!
四、throws
例外處理機制二
- 宣告拋出例外是Java中處理例外的第二種方式
●如果一個方法中的陳述句執行時可能生成某種例外,但是不能確定如何處理這種例外,則此方法應顯示地宣告拋出例外,表明該方法將不對這些例外進行處理,而由該方法的呼叫者負責處理
●在方法宣告中用 throws 陳述句可以宣告拋出例外的串列,throws后面的例外型別可以是方法中產生的例外型別,也可以是它的父類
宣告拋出例外舉例:
import java.io.*;
public class ThrowsTest {
public static void main(String[] args) {
ThrowsTest t = new ThrowsTest();
try {
t.readFile();
} catch (IOException e) {
e.printStackTrace();
}
}
public void readFile() throws IOException {
FileInputStream in = new FileInputStream("atguigushk.txt");
int b;
b = in.read();
while (b != -1) {
System.out.print((char) b);
b = in.read();
}
in.close();
}
}
👌重寫方法宣告拋出例外的原則
重寫方法不能拋出比被重寫方法范圍更大的例外型別
在多型的情況下舉例:
public class A {
public void methodA() throws IOException {
……
}
}
public class B1 extends A {
public void methodA() throws FileNotFoundException {
……
}
}
public class B2 extends A {
public void methodA() throws Exception { //報錯
……
}
}
五、throw
手動拋出例外
Java例外類物件也可根據需要使用人工創建并拋出
- 首先要生成例外類物件,然后通過throw陳述句實作拋出操作提交給Java運行環境
IOException e = new IOException();
throw e; - 可以拋出的例外必須是Throwable或其子類的實體
下面的陳述句在編譯時將會產生語法錯誤:throw new String(“want to throw”);
六、自定義例外類
一般地,用戶自定義例外類都是 RuntimeException 的子類
- 自定義例外類需要:
●撰寫幾個多載的構造器
●提供serialVersionUID
●通過throw拋出 - 自定義例外最重要的是例外類的名字,當例外出現時,可以根據名字判斷例外型別
用戶自己的例外類必須繼承現有的例外類
舉例:
public class ReturnExceptionDemo {
static void methodA() {
try {
System.out.println("進入方法A");
throw new RuntimeException("制造例外");
}finally {
System.out.println("用A方法的finally");
}
}
static void methodB() {
try {
System.out.println("進入方法B");
return;
} finally {
System.out.println("呼叫B方法的finally");
}
}
public static void main(String[] args) {
try {
methodA();
} catch (Exception e) {
System.out.println(e.getMessage());
}
methodB();
}
}
運行結果:
進入方法A
用A方法的finally
制造例外
進入方法B
呼叫B方法的finally
🎁總結:Java例外處理可以讓程式具有更好的容錯性,是程式更加健壯,也提供了處理程式運行時出現的任何意外或例外情況的方法
👌 作者算是一名Java初學者,文章如有錯誤,歡迎評論私信指正,一起學習~~
😊如果文章對小伙伴們來說有用的話,點贊👍關注🔎收藏🍔就是我的最大動力!
🚩不積跬步,無以至千里,書接下回,歡迎再見🌹
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/413519.html
標籤:其他
上一篇:分支陳述句(選擇結構)--if陳述句與switch陳述句
下一篇:分支陳述句和回圈陳述句(上)
