【发布时间】:2012-03-31 08:53:17
【问题描述】:
所以我最近写了一个扩展异常的java类,并使用该类的一个实例来检查案例并在发生错误时自行抛出。我发现当 main 的调用者捕获到这个异常时,它说异常被抛出的那一行是异常被创建的那一行,而不是它被抛出的那一行。我只是想知道为什么会这样,以及它是否是 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)
【问题讨论】:
标签: java debugging exception-handling jvm