NullPointerException in trycatch block



我正在研究try-catch块。在这里,我们通过blowup()抛出NullPoInterException,即使我们也可以分配

Exception e = new NullPointerException();

和blewit类再次是类型异常类。因此,我们投掷的例外必须被捕获在捕获块中,但事实并非如此。

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,则应在blowUp()中进行throw new BlewIt ()

简单地将事情放置,当Blewit扩展异常时,Blewit成为异常的子类,它并不意味着它会捕获NullPoInterExcept。

static void blowUp() throws BlewIt {
    throw new NullPointerException();
}

但是,由于NullPoInterException不是检查的例外,您的代码编译。

但是,当您以后在代码稍后将NullPointer异常投掷时,并尝试通过捕获块捕获它,就像预期的那样,它不会捕获它。

您正在投掷NullPointerException,并且您的捕获块正在捕获BlewIt,因此它直接转到finally块,并使用NullPointerException的堆栈痕迹打印无人例外。

您的捕获块只会捕获BlewIt及其子类型的例外。

编辑

class BlewIt extends NullPointerException

这将使BlewIt成为NullPointerException的子类,反之亦然。因此,您仍然无法通过BlewIt

捕获NullPointerException

相关内容

  • 没有找到相关文章

最新更新