NullPointerException:每个异常都不包含原因吗?

Bil*_*ill 5 java exception-handling nullpointerexception

我已经尝试在普遍的情况下调用此异常,默认情况下在我的应用程序中调用:

String causeClass = e.getCause().getClass().getName();
Run Code Online (Sandbox Code Playgroud)

但我得到了NullPointerException.

有没有一种安全的方法来查找原因并获取原因异常的类名?

Joã*_*lva 7

正如JustinKSU指出的那样,有时候没有原因.来自Throwable#getCause():

返回此throwable的原因,如果原因不存在或未知,则返回null.(原因是导致抛出此抛掷物的抛掷物.)

发生这种情况时,getCause()返回null,因此NullPointerException在您调用时抛出一个getClass().也许你可以用它代替:

Throwable t = e.getClause();
String causeClass = t == null ? "Unknown" : t.getClass().getName(); 
Run Code Online (Sandbox Code Playgroud)

但是,出于调试目的,我发现e.printStackTrace()要好得多.这样,您可以看到抛出异常的确切位置.以下是典型的输出printStackTrace():

 java.lang.NullPointerException
         at MyClass.mash(MyClass.java:9)
         at MyClass.crunch(MyClass.java:6)
         at MyClass.main(MyClass.java:3)
Run Code Online (Sandbox Code Playgroud)