Java中異常的處理以及自定義異常,拋出異常到方法調用棧底層

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("沒錢啦!!!");
  
 }
}
......................
相關文章
相關標籤/搜索