是否有可能在Java中构造一段代码,使假设的Java .lang. chucknorrisexception无法捕获?

我想到的是使用拦截器或面向方面的编程。


当前回答

任何代码都可以捕获Throwable。所以不,无论你创建什么异常都会是Throwable的子类并且会被捕获。

其他回答

在构造函数中,可以启动一个反复调用originalThread的线程。停止(ChuckNorisException.this)

线程可以重复捕获异常,但会一直抛出异常,直到异常死亡。

public class ChuckNorrisException extends Exception {
    public ChuckNorrisException() {
        System.exit(1);
    }
}

(当然,从技术上讲,这个异常永远不会被真正抛出,但是一个正确的ChuckNorrisException不能被抛出——它会先抛出你。)

是否有可能在java中构造一段代码,使假设的java.lang. chucknorrisexception无法捕获?

是的,这就是答案:设计你的java.lang.ChuckNorrisException,使它不是java.lang.Throwable的实例。为什么?从定义上讲,不可抛出的对象是不可捕获的,因为你永远不能捕获永远不能抛出的东西。

你可以把ChuckNorris隐藏起来,也可以把他封装起来,也可以把他吞下去……

try {doChuckAction();} catch(ChuckNorrisException cne){/*做其他事情*/}

在finalize中调用System.exit(1),并抛出来自所有其他方法的异常副本,以便程序退出。