程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 更多編程語言 >> 編程解疑 >> 源代碼-按書上寫了一段java捕獲異常的代碼,不知道問題出在哪裡

源代碼-按書上寫了一段java捕獲異常的代碼,不知道問題出在哪裡

編輯:編程解疑
按書上寫了一段java捕獲異常的代碼,不知道問題出在哪裡

源代碼如下:
package com.Sixping.Ncre;

public class Rethrow {
public static void rt() throws Exception {//定義方法,拋出Exception類的異常
System.out.println("old exception in rt()");
throw new Exception("thrown from rt()");
}
public static void wq() throws Throwable {//定義方法,調用rt(),捕獲rt()拋出的異常
try {
rt();
} catch (Exception e) {
System.out.println("Inside wq(),e.printStackTrace():");
e.printStackTrace(); //輸出堆棧使用情況
throw e; //重新拋出異常
}
}
public static void main(String[] args) throws Throwable {
try {
wq(); //產生被重新拋出的對象
} catch (Exception e) {
System.out.println("Caught in main,e.printStackTrace():");
e.printStackTrace(); //再次輸出堆棧信息
}
}
}

運行報錯如下:
old exception in rt()

java.lang.Exception: thrown from rt()
at com.Sixping.Ncre.Rethrow.rt(Rethrow.java:6)
at com.Sixping.Ncre.Rethrow.wq(Rethrow.java:10)
at com.Sixping.Ncre.Rethrow.main(Rethrow.java:19)
java.lang.Exception: thrown from rt()
at com.Sixping.Ncre.Rethrow.rt(Rethrow.java:6)
at com.Sixping.Ncre.Rethrow.wq(Rethrow.java:10)
at com.Sixping.Ncre.Rethrow.main(Rethrow.java:19)
Inside wq(),e.printStackTrace():
Caught in main,e.printStackTrace():

求大神解答

最佳回答:


沒有錯誤啊,你不就是測試異常拋出嘛,流程是這樣的;
首先,rt()方法拋出了異常,然後你在wq()方法中捕獲並上拋出,直至main方法中捕獲的是Exception,但是wq拋出的Throwable異常沒有處理,所以被main方法繼續拋出給虛擬機了。
代碼運行是正確的,這不是運行時報錯,而是你就是測試的throw e,拋出異常後你在捕獲分支中使用的是e.printStack打印堆棧信息了。這個流程是對的,你可以注釋調用e.printStackTrace(); 就能發現不會打印堆棧日志了。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved