D. *_*Ace 1 java nullpointerexception
我对以下问题有所了解.我有一个名为TestClass20的类,当我编译并运行时,我得到以下输出:
Exception in thread "main" MyException
at TestClass20.m1(TestClass20.java:21)
at TestClass20.main(TestClass20.java:17)
Run Code Online (Sandbox Code Playgroud)
//TestClass20.java
class MyException extends IllegalArgumentException{}
public class TestClass20{
public static void main(String[] args){
TestClass20 tc = new TestClass20();
try{
tc.m1();
}
catch (MyException e){
tc.m2(); // THIS IS LINE 11
}
finally{
tc.m1(); // THIS IS LINE 17
}
}
public void m1() throws MyException{
throw new MyException(); //THIS IS LINE 21
}
public void m2() throws RuntimeException{
throw new NullPointerException();
}
}
Run Code Online (Sandbox Code Playgroud)
我遇到的问题是为什么第11行没有抛出任何NullPointerException.第11行调用m2()方法,它抛出一个新的NullPointerException,所以我希望它抛出NullPointerException.我期待的输出应该是:
Exception in thread "main" java.lang.NullPointerException // Exception that should have been thrown by line 11
Run Code Online (Sandbox Code Playgroud)
然后
Exception in thread "main" MyException // Exception thrown by line 17.
Run Code Online (Sandbox Code Playgroud)
总结:第11行应首先抛出NullPointerException,然后第17行抛出MyException
如果我稍微改变代码:
//TestClass21.java
class MyException extends IllegalArgumentException{}
public class TestClass21{
public static void main(String[] args){
TestClass21 tc = new TestClass21();
tc.m2(); //LINE 7
}
public void m1() throws MyException{
throw new MyException();
}
public void m2() throws RuntimeException{
throw new NullPointerException();
}
}
Run Code Online (Sandbox Code Playgroud)
然后我得到以下输出:
Exception in thread "main" java.lang.NullPointerException
at TestClass21.m2(TestClass21.java:17)
at TestClass21.main(TestClass21.java:7)
Run Code Online (Sandbox Code Playgroud)
那么为什么NullPointerException在TestClass21.java中打印但是它没有在TestClass20.java中打印?是否无法在catch块中打印异常(NullPointerException或任何其他RuntimeException)?
任何解释将不胜感激.
谢谢
你tc.m1();终于阻止了所以抛出了MyException.
最后总是被执行,所以最后一个异常是最后抛出的异常.并且NullPointerException也被抛出但是它被MyExceptionfinally块中的抑制.
tc.m1();从finally块中删除,你会看到你的NullPointerException