因此,我最近編寫了一個java類,它擴展了異常,並使用該類的一個實例來檢查個案並在發生錯誤時自行拋出。我發現當main的調用者捕獲到這個異常時,它表示拋出異常的那一行是創建異常的那一行,而不是它從那裏拋出的那一行。我只是想知道爲什麼會這樣,以及它是否打算用於jvm的行爲,因爲這不是拋出異常的常見方式。如果它是有意的行爲,那麼這是合理的,因爲它看起來像從拋出異常的行號會更有用(並且可能更容易通過堆棧進行跟蹤)。樣本案例遵循展示預期行爲和意外情況。jvm異常捕獲
正常的異常投擲:
1 public class Test
2 {
3 public static void main(String ... args) throws Throwable
4 {
5 switch(5)
6 {
7 case 1: throw new Exception("Exception");
8 case 2: throw new Exception("Exception");
9 case 3: throw new Exception("Exception");
10 case 4: throw new Exception("Exception");
11 case 5: throw new Exception("Exception");
12 }
13 }
14 }
輸出:
Exception in thread "main" java.lang.Exception: Exception
at Test.main(Test.java:11)
我的方法(簡化):
1 public class Test
2 {
3 public static void main(String ... args) throws Throwable
4 {
5 Exception e = new Exception("Exception");
6 switch(5)
7 {
8 case 1: throw e;
9 case 2: throw e;
10 case 3: throw e;
11 case 4: throw e;
12 case 5: throw e;
13 }
14 }
15 }
輸出:
Exception in thread "main" java.lang.Exception: Exception
at Test.main(Test.java:5)
+1正要回覆簡訊正是這個。 – hmjd 2012-03-31 08:58:07