我正在研究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()

10-04 21:11