package com.gezhi;
/**
* 建立一個自定義異常SpendMoneyException類
*
* @author square 涼
*
*/
@SuppressWarnings("serial")
/**
* 該類繼承異常類的父類Exception
*
* @author square 涼
*
*/
public class SpendMoneyException extends Exception {
/**
* 顯示寫出自定義異常的無參構造器
*/
public SpendMoneyException() {
}
/**
* 建立一個自定義異常的有參構造器(重寫父類的有參構造,嚴格來講不能是重寫)
*
* @param message
*/
public SpendMoneyException(String message) {
super(message);
}
}
...................................................................................
package com.gezhi;
/**
* @ 建立一個異常類
* @author square 涼
*
*/
public class ChainTest {
/**
* main方法調用test2這個方法,捕獲並處理被拋出的方法
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
ChainTest ct = new ChainTest();//實例化一個類對象
try {
ct.test2();//調用test2()這個方法
} catch (Exception e) {
// TODO: handle exception
e.printStackTrace();//捕獲這個異常並打印異常發生的位置
}
}
/**
* 建立test2()這個方法引用test1的方法並捕獲異常且不處理,繼續拋給main方法
*/
private void test2() {
// TODO Auto-generated method stub
try {
test1();//調用test1方法
} catch (SpendMoneyException e) {
// TODO Auto-generated catch block
RuntimeException rn = new RuntimeException("一分錢一分貨");//將test1裏面拋出的自定義異常又聲明爲運行時異常繼續拋出
rn.initCause(e);//引發該運行時異常的緣由和異常地址
throw rn;//拋出新的異常
}
}
/**
* test1方法聲明一個自定義異常
* @throws SpendMoneyExceptionSpendMoneyException不處理繼續向下拋出
*/
private static void test1() throws SpendMoneyException {
// TODO Auto-generated method stub
throw new SpendMoneyException("沒錢啦!!!");
}
}
......................