欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Java?try?catch語句異常處理詳解

 更新時間:2023年11月28日 10:58:02   作者:Itmastergo  
這篇文章主要給大家介紹了關(guān)于Java?try?catch語句異常處理的相關(guān)資料,Java中的try-catch用于捕獲和處理異常,文中通過代碼介紹的非常詳細,需要的朋友可以參考下

Java try catch語句

在實際應(yīng)用中,對于錯誤的處理是極其重要的,任何程序都很難做到百分百完美,程序中可能存在大量未知問題,所以程序開發(fā)時一定要對各種問題進行相應(yīng)的處理,而 Java 提供的異常處理機制可以幫用戶更好地解決這方面的問題。Java 的異常處理機制可以讓程序具有極好的容錯性,讓程序更加健壯。

Java 的異常處理通過 5 個關(guān)鍵字來實現(xiàn):try、catch、throw、throws 和 finally

try catch 語句用于捕獲并處理異常,finally 語句用于在任何情況下(除特殊情況外)都必須執(zhí)行的代碼,throw 語句用于拋出異常,throws 語句用于聲明可能會出現(xiàn)的異常。

這里主要介紹 Java 中的 try catch 語句。在 Java 中通常采用 try catch 語句來捕獲異常并處理。語法格式如下:

try {
    // 可能發(fā)生異常的語句
} catch(ExceptionType e) {
    // 處理異常語句
}

在以上語法中,把可能引發(fā)異常的語句封裝在 try 語句塊中,用以捕獲可能發(fā)生的異常。catch 后的( )里放匹配的異常類,指明 catch 語句可以處理的異常類型,發(fā)生異常時產(chǎn)生異常類的實例化對象。

如果 try 語句塊中發(fā)生異常,那么一個相應(yīng)的異常對象就會被拋出,然后 catch 語句就會依據(jù)所拋出異常對象的類型進行捕獲,并處理。處理之后,程序會跳過 try 語句塊中剩余的語句,轉(zhuǎn)到 catch 語句塊后面的第一條語句開始執(zhí)行。

如果 try 語句塊中沒有異常發(fā)生,那么 try 塊正常結(jié)束,后面的 catch 語句塊被跳過,程序?qū)?catch 語句塊后的第一條語句開始執(zhí)行。

注意:try...catch 與 if...else 不一樣,try 后面的花括號{ }不可以省略,即使 try 塊里只有一行代碼,也不可省略這個花括號。與之類似的是,catch 塊后的花括號{ }也不可以省略。另外,try 塊里聲明的變量只是代碼塊內(nèi)的局部變量,它只在 try 塊內(nèi)有效,其它地方不能訪問該變量。

在上面語法的處理代碼塊 1 中,可以使用以下 3 個方法輸出相應(yīng)的異常信息。

  • printStackTrace() 方法:指出異常的類型、性質(zhì)、棧層次及出現(xiàn)在程序中的位置。
  • getMessage() 方法:輸出錯誤的性質(zhì)。
  • toString() 方法:給出異常的類型與性質(zhì)。

例 1

編寫一個錄入學(xué)生姓名、年齡和性別的程序,要求能捕捉年齡不為數(shù)字時的異常。在這里使用 try catch 語句來實現(xiàn),具體代碼如下:

import java.util.Scanner;
public class Test02 {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        System.out.println("---------學(xué)生信息錄入---------------");
        String name = ""; // 獲取學(xué)生姓名
        int age = 0; // 獲取學(xué)生年齡
        String sex = ""; // 獲取學(xué)生性別
        try {
            System.out.println("請輸入學(xué)生姓名:");
            name = scanner.next();
            System.out.println("請輸入學(xué)生年齡:");
            age = scanner.nextInt();
            System.out.println("請輸入學(xué)生性別:");
            sex = scanner.next();
        } catch (Exception e) {
            e.printStackTrace();
            System.out.println("輸入有誤!");
        }
        System.out.println("姓名:" + name);
        System.out.println("年齡:" + age);
    }
}

上述代碼在 main() 方法中使用 try catch 語句來捕獲異常,將可能發(fā)生異常的age = scanner.nextlnt();代碼放在了 try 塊中,在 catch 語句中指定捕獲的異常類型為 Exception,并調(diào)用異常對象的 printStackTrace() 方法輸出異常信息。運行結(jié)果如下所示:

---------學(xué)生信息錄入---------------
請輸入學(xué)生姓名:
徐白
請輸入學(xué)生年齡:
110a
java.util.InputMismatchException
    at java.util.Scanner.throwFor(Unknown Source)
    at java.util.Scanner.next(Unknown Source)
    at java.util.Scanner.nextInt(Unknown Source)
    at java.util.Scanner.nextInt(Unknown Source)
輸入有誤!
姓名:徐白
年齡:0
    at text.text.main(text.java:19)

多重catch語句

如果 try 代碼塊中有很多語句會發(fā)生異常,而且發(fā)生的異常種類又很多。那么可以在 try 后面跟有多個 catch 代碼塊。多 catch 代碼塊語法如下:

try {
    // 可能會發(fā)生異常的語句
} catch(ExceptionType e) {
    // 處理異常語句
} catch(ExceptionType e) {
    // 處理異常語句
} catch(ExceptionType e) {
    // 處理異常語句
...
}

在多個 catch 代碼塊的情況下,當(dāng)一個 catch 代碼塊捕獲到一個異常時,其它的 catch 代碼塊就不再進行匹配。

注意:當(dāng)捕獲的多個異常類之間存在父子關(guān)系時,捕獲異常時一般先捕獲子類,再捕獲父類。所以子類異常必須在父類異常的前面,否則子類捕獲不到。

例 2

public class Test03 {
    public static void main(String[] args) {
        Date date = readDate();
        System.out.println("讀取的日期 = " + date);
    }
    public static Date readDate() {
        FileInputStream readfile = null;
        InputStreamReader ir = null;
        BufferedReader in = null;
        try {
            readfile = new FileInputStream("readme.txt");
            ir = new InputStreamReader(readfile);
            in = new BufferedReader(ir);
            // 讀取文件中的一行數(shù)據(jù)
            String str = in.readLine();
            if (str == null) {
                return null;
            }
            DateFormat df = new SimpleDateFormat("yyyy-MM-dd");
            Date date = df.parse(str);
            return date;
        } catch (FileNotFoundException e) {
            System.out.println("處理FileNotFoundException...");
            e.printStackTrace();
        } catch (IOException e) {
            System.out.println("處理IOException...");
            e.printStackTrace();
        } catch (ParseException e) {
            System.out.println("處理ParseException...");
            e.printStackTrace();
        }
        return null;
    }
}

上述代碼通過 Java I/O(輸入輸出)流技術(shù)從文件 readme.txt 中讀取字符串,然后解析成為日期。由于 Java I/O 技術(shù)還沒有介紹,大家先不要關(guān)注 I/O 技術(shù)細節(jié),只看調(diào)用它們時方法會發(fā)生的異常就可以了。

在 try 代碼塊中第 12 行代碼調(diào)用 FileInputStream 構(gòu)造方法可能會發(fā)生 FileNotFoundException 異常。第 16 行代碼調(diào)用 BufferedReader 輸入流的 readLine() 方法可能會發(fā)生 IOException 異常。FileNotFoundException 異常是 IOException 異常的子類,應(yīng)該先捕獲 FileNotFoundException 異常,見代碼第 23 行;后捕獲 IOException 異常,見代碼第 26 行。

如果將 FileNotFoundException 和 IOException 捕獲順序調(diào)換,那么捕獲 FileNotFoundException 異常代碼塊將永遠不會進入,F(xiàn)ileNotFoundException 異常處理永遠不會執(zhí)行。 上述代碼第 29 行 ParseException 異常與 IOException 和 FileNotFoundException 異常沒有父子關(guān)系,所以捕獲 ParseException 異常位置可以隨意放置。

那么在以下幾種場景中,會需要使用try..catch捕獲程序異常

  • 程序涉及到打開關(guān)閉數(shù)據(jù)文件等資源時,使用完后要關(guān)閉的情況下,要使用 try-catch防止出現(xiàn)io異常;
  • 在涉及到網(wǎng)絡(luò)連接編程時,由于網(wǎng)絡(luò)連接存在不確定性,所有需要對相關(guān)代碼塊進行 try…catch ,防止網(wǎng)絡(luò)異常帶來的程序出錯;
  • 還有一些不可預(yù)料的可能發(fā)生錯誤的代碼塊需要try..catch;如:i/0 這類異常 ,空指針異常,數(shù)組越界異常等

總結(jié)

到此這篇關(guān)于Java try catch語句異常處理詳解的文章就介紹到這了,更多相關(guān)Java try catch語句內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Java實現(xiàn)評論回復(fù)功能的完整步驟

    Java實現(xiàn)評論回復(fù)功能的完整步驟

    這篇文章主要給大家介紹了關(guān)于Java實現(xiàn)評論回復(fù)功能的完整步驟,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-11-11
  • Spring AI實現(xiàn)智能聊天模型

    Spring AI實現(xiàn)智能聊天模型

    通過本文的介紹,我們深入了解了Spring AI項目的優(yōu)勢和特性,以及在實際應(yīng)用中的快速實戰(zhàn)示例,Spring AI作為一個高度抽象化的人工智能應(yīng)用程序開發(fā)框架,為開發(fā)者提供了便捷的模型支持、靈活的功能模塊交換和優(yōu)化能力
    2024-11-11
  • java生成圖片驗證碼示例程序

    java生成圖片驗證碼示例程序

    這篇文章主要介紹了java生成圖片驗證碼示例程序,大家參考使用吧
    2013-11-11
  • SpringBoot+Vue實現(xiàn)數(shù)據(jù)添加功能

    SpringBoot+Vue實現(xiàn)數(shù)據(jù)添加功能

    這篇文章主要介紹了SpringBoot+Vue實現(xiàn)數(shù)據(jù)添加功能,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-03-03
  • 詳解Spring學(xué)習(xí)之聲明式事務(wù)管理

    詳解Spring學(xué)習(xí)之聲明式事務(wù)管理

    這篇文章主要介紹了詳解Spring學(xué)習(xí)之聲明式事務(wù)管理,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-07-07
  • Java日志框架之logback使用詳解

    Java日志框架之logback使用詳解

    這篇文章主要介紹了Java日志框架之logback使用詳解,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-07-07
  • SpringCloud之Admin服務(wù)監(jiān)控實現(xiàn)流程示例詳解

    SpringCloud之Admin服務(wù)監(jiān)控實現(xiàn)流程示例詳解

    這篇文章主要為大家介紹了SpringCloud之Admin服務(wù)監(jiān)控流程示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-09-09
  • springmvc實現(xiàn)文件上傳功能

    springmvc實現(xiàn)文件上傳功能

    這篇文章主要為大家詳細介紹了springmvc實現(xiàn)文件上傳功能,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-03-03
  • Spring Security驗證流程剖析及自定義驗證方法

    Spring Security驗證流程剖析及自定義驗證方法

    Spring Security是一個能夠為基于Spring的企業(yè)應(yīng)用系統(tǒng)提供聲明式的安全訪問控制解決方案的安全框架。這篇文章主要介紹了Spring Security驗證流程剖析及自定義驗證方法,需要的朋友可以參考下
    2018-03-03
  • SpringBoot項目如何打包成war包

    SpringBoot項目如何打包成war包

    使用SpringBoot 開發(fā)項目,由于內(nèi)置了Tomcat,所以項目可以直接啟動,部署到服務(wù)器的時候,直接打成 jar 包,就可以運行了,這篇文章主要介紹了SpringBoot項目如何打包成war包,需要的朋友可以參考下
    2024-07-07

最新評論