Java中catch和throw同時使用
一應用背景
在實際應用中,處理異常往往需要更加複雜的處理——當一個異常出現時,單靠某個方法無法完全處理該異常,必須由幾個方法協作才能完全處理該異常,也就是說,在異常出現的當前方法中,程式只能對異常進行部分處理,還有些處理需要在方法的呼叫者中才能完成,所以應該再次丟擲異常,讓該方法的呼叫者也能捕獲到異常。
為了實現這種通過多個方法協作處理同一異常的情形,可以catch塊中結合throw語句來完成。
二應用舉例
1 程式碼示例
AuctionTest.java
public class AuctionTest { private double initPrice = 30.0; // 因為該方法中顯式丟擲了AuctionException異常, // 所以此處需要宣告丟擲AuctionException異常 public void bid(String bidPrice) throws AuctionException { double d = 0.0; try { d = Double.parseDouble(bidPrice); } catch (Exception e) { // 此處完成本方法中可以對異常執行的修復處理, // 此處僅僅是在控制檯列印異常跟蹤棧資訊。 e.printStackTrace(); // 再次丟擲自定義異常 throw new AuctionException("競拍價必須是數值," + "不能包含其他字元!"); } if (initPrice > d) { throw new AuctionException("競拍價比起拍價低," + "不允許競拍!"); } initPrice = d; } public static void main(String[] args) { AuctionTest at = new AuctionTest(); try { at.bid("df"); } catch (AuctionException ae) { // 再次捕捉到bid方法中的異常。並對該異常進行處理 System.err.println(ae.getMessage()); } } }
AuctionException.java
public class AuctionException extends Exception
{
// 無引數的構造器
public AuctionException(){} //①
// 帶一個字串引數的構造器
public AuctionException(String msg) //②
{
super(msg);
}
}
2 執行結果
java.lang.NumberFormatException: For input string: "df"
at sun.misc.FloatingDecimal.readJavaFormatString(FloatingDecimal.java:1224)
at java.lang.Double.parseDouble(Double.java:510)
at AuctionTest.bid(AuctionTest.java:16)
at AuctionTest.main(AuctionTest.java:39)
競拍價必須是數值,不能包含其他字元!
3 結果說明
上面程式bid對應catch塊捕獲到異常後,系統列印了該異常的跟蹤棧資訊,接著丟擲一個AuctionException異常,通知該方法呼叫者再次處理AuctionException異常。所有程式中的main方法,也就是bid方法呼叫者再次捕獲AuctionException異常並將該異常詳細描述資訊輸出到標準錯誤輸出。
相關推薦
Java中catch和throw同時使用
一應用背景 在實際應用中,處理異常往往需要更加複雜的處理——當一個異常出現時,單靠某個方法無法完全處理該異常,必須由幾個方法協作才能完全處理該異常,也就是說,在異常出現的當前方法中,程式
Java中throws和throw的區別講解
當然,你需要明白異常在Java中式以一個物件來看待。 並且所有系統定義的編譯和執行異常都可以由系統自動丟擲,稱為標準異常,但是一般情況下Java 強烈地要求應用程式進行完整的異常處理,給使用者友好的提示,或者修正後使程式繼續執行。 直接進入正題哈: 1.使用者程式自定義的異常和應用程式特定的異常,必
雜談——Java中throws和throw的區別
之前本帥博主寫過一篇關於try-catch和finally的文章,即try-catch與finally語句塊中使用return的注意事項以及相關引申,這篇文章講述了一些它們之間的注意事項。 這try-catch語句塊中,還有很重要的一點,就是異常。 對於異常,我們從來都不陌生。可以說,自從我
關於對Java中異常處理的try catch和throw的理解(淺顯理解)
一.try catch方法 A.什麼try catch 方法 try catch是異常處理中一種方法,檢測並捕捉異常然後進行處理 try是檢測異常,catch是捕捉異常 B try catch的三種格式 格式1 try{ 語句體; }catch{
java異常 try-catch 和throw
異常處理1:try和catch捕獲異常 package com.MissXu.blogTest; import java.util.Scanner; public class Exception
Java中Integer和int比較大小出現的錯誤
最好 裏的 pan 轉換 als 範圍 urn 返回 錯誤 Java在某一處維護著一個常量池,(我記得)在小於128的範圍內,直接用 1 Integer i = 100; 2 int j = 100; 3 return i == j;//true 這裏返回的是true.
java中ArrayList和LinkedList區別
插入 list 新的 查找 arr tro 基於 列表 時間復雜度 ArrayList和LinkedList最主要的區別是基於不同數據結構 ArrayList是基於動態數組的數據結構,LinkedList基於鏈表的數據結構,針對這點,從時間復雜度和空間復雜度來看主要區別:
java中堆和棧的區別
mem 線程 所有 生成 werror 空間 調用 訪問 指向 01,各司其職; 棧內存用來存儲局部變量和方法的調用, 而堆內存用來存儲java中的對象,無論是成員變量,局部變量,還是類變量 他們指向的對象都存儲在堆內存中。
Java中PreparedStatement和Statement的用法區別
aik txt 實例 什麽 一點 所有 一個 drop passwd Java中PreparedStatement和Statement的用法區別 (2012-08-01 11:06:44) 轉載▼ 標簽: 雜談 1、 PreparedStatem
java中Comparator 和 Comparable的區別
true public arr ins ride err instance ural code 1、Comparable的代碼如下: public interface Comparable<T> { public int compareTo(T o);
JAVA中日期和時間的格式化選項
println 對象 bsp lec pub cti class 日子 月份 一、使用printf方法 1 import java.util.Date; 2 import java.util.Scanner; 3 4 5 public class Test
【轉載】Java中Comparable和Comparator比較
import 比較器 todo itl 復制代碼 ack div array open 【本文轉自】http://www.cnblogs.com/skywang12345/p/3324788.html Comparable 簡介 Comparable 是排序接口。 若一
Java中arraylist和linkedlist源代碼分析與性能比較
rom fin java 獲取 color () serializa padding previous Java中arraylist和linkedlist源代碼分析與性能比較 1,簡單介紹 在java開發中比較經常使用的數據結構是arra
java中 this和super的差別
屏蔽 code args mod -h ans 使用 -a oid this表示當前調用方法的對象的引用: (誰調用這種方法,誰就是這個對象,這個this就是它的引用) 比方:<pre name="code" class="j
JAVA中 List和ArrayList的區別
屬性和方法 vector 實現類 多個 一個 什麽 性能 {} 等等 List是一個接口,而ListArray是一個類。 ListArray繼承並實現了List。 所以List不能被構造,但可以向上面那樣為List創建一個引用,而ListArray就可以被構造。 Li
Java中的==和equals
基於 equals return 復合 覆蓋 之間 方法 [] 。。 1.基本數據類型 byte ,short ,int ,long ,double ,float,boolean,char 他們之間的比較,應用雙等號(==),比較的是他們的值。 2.復合數據類型(類
Java中awt和swing的關系和區別
界面 及其 軟件 功能性 圖形圖像 自己 輕量級 c++程序 控制 概述 awt是抽象組件窗口工具包,是Java最早的用於編寫圖形應用程序的開發包。 Swing是為了補充awt的一些功能性的缺失問題而開發的包,以awt為基礎的。 軟件包 java.awt 的描述 包含用於創
Java中Comparable和Comparator比較
collect clas bold 數據 let 排序類 height webkit tom 1、Comparable 介紹 Comparable 是一個排序接口,如果一個類實現了該接口,說明該類本身是可以進行排序的。註意,除了基本數據類型(八大基本數據類型) 的數組或
java中string和int的相互轉換
integer chan 也會 tee tex 什麽 產生 chang details java中string和int的相互轉換 int -> String int i=12345;String s="";核心:s=i+""; String -> int s="
Java中RuntimeException和Exception的區別
字符 所有 數組越界 技術 ace stat ast == erro 在java的異常類體系中,Error和RuntimeException是非檢查型異常,其他的都是檢查型異常。 所有方法都可以在不聲明throws的情況下拋出RuntimeException及其子類 不可以