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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

1.5 try catch语句详解

發(fā)布時間:2025/3/20 编程问答 20 豆豆
生活随笔 收集整理的這篇文章主要介紹了 1.5 try catch语句详解 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

在實際應(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)的異常。

本節(jié)先主要介紹 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.InputMismatchExceptionat 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) 輸入有誤! 姓名:徐白 年齡:0at 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 Test {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 中讀取字符串,然后解析成為日期。

在 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 異常代碼塊將永遠不會進入,FileNotFoundException 異常處理永遠不會執(zhí)行。 上述代碼第 29 行 ParseException 異常與 IOException 和 FileNotFoundException 異常沒有父子關(guān)系,所以捕獲 ParseException 異常位置可以隨意放置。

總結(jié)

以上是生活随笔為你收集整理的1.5 try catch语句详解的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

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