Java PrintStackTrace始终指向导致行号到最外面的尝试,这是预期的行为吗?

时间:2016-10-03 08:25:30

标签: java exception

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();
    }

}

运行时,提供以下输出:

    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行,则输出中不会打印出堆栈跟踪。

提前致谢。

1 个答案:

答案 0 :(得分:1)

public interface B extends A用于向java类添加更多方法(或行为)。

public interface B implements A不是java中的有效代码,因为您无法通过实现其他接口来创建接口。实现接口时,需要在所有声明的方法中编写相关代码。一旦在方法中编写代码,就不能再将其命名为接口,因为接口只包含方法签名。