我正在研究try-catch块。
这里我们通过blowup()抛出NullPointerException
,即使我们可以分配
Exception e = new NullPointerException();
而BlewIt类又是一个类型Exception类。
因此我们抛出的异常必须在catch块中捕获,但事实并非如此。
class BlewIt extends Exception {
BlewIt() { }
BlewIt(String s) { super(s); }
}
class Test {
static void blowUp() throws BlewIt {
throw new NullPointerException();
}
public static void main(String[] args) {
try {
blowUp();
} catch (BlewIt b) {
System.out.println("Caught BlewIt");
} finally {
System.out.println("Uncaught Exception");
}
}
}
输出:
Uncaught Exception
Exception in thread "main" java.lang.NullPointerException
at Test.blowUp(Test.java:7)
at Test.main(Test.java:11)
但是,如果您编写这样的代码,则可以正常工作:
try {
blowUp();
} catch (Exception b) {
System.out.println("Caught BlewIt");
} finally {
System.out.println("Uncaught Exception");
}
现在BlewIt是NullPointerException类型的,但我仍然得到相同的输出。
class BlewIt extends NullPointerException {
BlewIt() {
}
BlewIt(String s) {
super(s);
}
}
class Test {
static void blowUp() throws BlewIt {
throw new NullPointerException();
}
public static void main(String[] args) {
Exception e = new NullPointerException();
try {
blowUp();
} catch (BlewIt b) {
System.out.println("Caught BlewIt");
} finally {
System.out.println("Uncaught Exception");
}
}
}
请帮助我清除其背后的概念。
最佳答案
NullPointerException
不是BlewIt
的子类。因此,捕获BlewIt
不会捕获NullPointerException
。
如果要捕获BlewIt
,则应在throw new BlewIt ()
中输入blowUp()
。