1. 程式人生 > >Java中catch和throw同時使用

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異常並將該異常詳細描述資訊輸出到標準錯誤輸出。

相關推薦

Javacatchthrow同時使用

一應用背景        在實際應用中,處理異常往往需要更加複雜的處理——當一個異常出現時,單靠某個方法無法完全處理該異常,必須由幾個方法協作才能完全處理該異常,也就是說,在異常出現的當前方法中,程式

Javathrowsthrow的區別講解

當然,你需要明白異常在Java中式以一個物件來看待。 並且所有系統定義的編譯和執行異常都可以由系統自動丟擲,稱為標準異常,但是一般情況下Java 強烈地要求應用程式進行完整的異常處理,給使用者友好的提示,或者修正後使程式繼續執行。 直接進入正題哈: 1.使用者程式自定義的異常和應用程式特定的異常,必

雜談——Javathrowsthrow的區別

之前本帥博主寫過一篇關於try-catch和finally的文章,即try-catch與finally語句塊中使用return的注意事項以及相關引申,這篇文章講述了一些它們之間的注意事項。 這try-catch語句塊中,還有很重要的一點,就是異常。 對於異常,我們從來都不陌生。可以說,自從我

關於對Java異常處理的try catchthrow的理解(淺顯理解)

一.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

JavaIntegerint比較大小出現的錯誤

最好 裏的 pan 轉換 als 範圍 urn 返回 錯誤 Java在某一處維護著一個常量池,(我記得)在小於128的範圍內,直接用 1 Integer i = 100; 2 int j = 100; 3 return i == j;//true 這裏返回的是true.

javaArrayListLinkedList區別

插入 list 新的 查找 arr tro 基於 列表 時間復雜度 ArrayList和LinkedList最主要的區別是基於不同數據結構 ArrayList是基於動態數組的數據結構,LinkedList基於鏈表的數據結構,針對這點,從時間復雜度和空間復雜度來看主要區別:

java棧的區別

mem 線程 所有 生成 werror 空間 調用 訪問 指向 01,各司其職;         棧內存用來存儲局部變量和方法的調用,         而堆內存用來存儲java中的對象,無論是成員變量,局部變量,還是類變量         他們指向的對象都存儲在堆內存中。

JavaPreparedStatementStatement的用法區別

aik txt 實例 什麽 一點 所有 一個 drop passwd Java中PreparedStatement和Statement的用法區別 (2012-08-01 11:06:44) 轉載▼ 標簽: 雜談 1、 PreparedStatem

javaComparator 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

【轉載】JavaComparableComparator比較

import 比較器 todo itl 復制代碼 ack div array open 【本文轉自】http://www.cnblogs.com/skywang12345/p/3324788.html Comparable 簡介 Comparable 是排序接口。 若一

Javaarraylistlinkedlist源代碼分析與性能比較

rom fin java 獲取 color () serializa padding previous Java中arraylist和linkedlist源代碼分析與性能比較 1,簡單介紹 在java開發中比較經常使用的數據結構是arra

java thissuper的差別

屏蔽 code args mod -h ans 使用 -a oid this表示當前調用方法的對象的引用: (誰調用這種方法,誰就是這個對象,這個this就是它的引用) 比方:<pre name="code" class="j

JAVA ListArrayList的區別

屬性和方法 vector 實現類 多個 一個 什麽 性能 {} 等等 List是一個接口,而ListArray是一個類。 ListArray繼承並實現了List。 所以List不能被構造,但可以向上面那樣為List創建一個引用,而ListArray就可以被構造。 Li

Java的==equals

基於 equals return 復合 覆蓋 之間 方法 [] 。。 1.基本數據類型   byte ,short ,int ,long ,double ,float,boolean,char   他們之間的比較,應用雙等號(==),比較的是他們的值。 2.復合數據類型(類

Javaawtswing的關系區別

界面 及其 軟件 功能性 圖形圖像 自己 輕量級 c++程序 控制 概述 awt是抽象組件窗口工具包,是Java最早的用於編寫圖形應用程序的開發包。 Swing是為了補充awt的一些功能性的缺失問題而開發的包,以awt為基礎的。 軟件包 java.awt 的描述 包含用於創

JavaComparableComparator比較

collect clas bold 數據 let 排序類 height webkit tom 1、Comparable 介紹 Comparable 是一個排序接口,如果一個類實現了該接口,說明該類本身是可以進行排序的。註意,除了基本數據類型(八大基本數據類型) 的數組或

javastringint的相互轉換

integer chan 也會 tee tex 什麽 產生 chang details java中string和int的相互轉換 int -> String int i=12345;String s="";核心:s=i+""; String -> int s="

JavaRuntimeExceptionException的區別

字符 所有 數組越界 技術 ace stat ast == erro 在java的異常類體系中,Error和RuntimeException是非檢查型異常,其他的都是檢查型異常。 所有方法都可以在不聲明throws的情況下拋出RuntimeException及其子類 不可以