关于异常:Java PrintStackTrace始终指向导致行号到最外层的尝试,这是预期的行为吗?

Java PrintStackTrace always points causing line number to outermost try, is this expected behavior?

本问题已经有最佳答案,请猛点这里访问。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
public class ThrowDemo {

    public static void catchAndThrowNullPointerException() {
        try {
            throw new NullPointerException();   // Line Number 7
        }
        catch(NullPointerException npe) {
            System.out.println("NPE thrown");
            try {
                throw npe;
            }
            catch(Exception ex) {
                System.out.println("Exception thrown inside nested try.");
                throw ex;                 // Line 16
            }
        }
    }

    public static void main(String args[]) {
        catchAndThrowNullPointerException();
    }

}

运行时,提供以下输出:

1
2
3
4
5
    NPE thrown
Exception thrown inside nested try.
Exception in thread"main" java.lang.NullPointerException
    at exception.handling.ThrowDemo.catchAndThrowNullPointerException(ThrowDemo.java:7)
    at exception.handling.ThrowDemo.main(ThrowDemo.java:22)

这是一个预期的行为吗?如果是这样,为什么实际的第16行会导致异常被抛出到堆栈跟踪中没有包含的主函数中?产生这种怀疑的原因是,如果第16行被注释,那么输出中就没有打印stacktrace。

事先谢谢。


EDCOX1(0)是为Java类添加更多的方法(或行为)。

EDCOX1 1Ω不是Java中的一个有效代码,因为不能通过实现另一个接口来创建接口。在实现接口时,需要在所有声明的方法中编写相关的代码。一旦在方法中编写代码,就不能再将其命名为接口,因为接口只包含方法签名。