Java 如果我想从遗留代码中删除catch(Throwable t)子句,我应该注意什么?

Java 如果我想从遗留代码中删除catch(Throwable t)子句,我应该注意什么?,java,tomcat,jvm,Java,Tomcat,Jvm,如果我删除这样的捕获,那么JVM/Tomcat会有什么样的行为?我对容器线程和非容器管理线程都感兴趣,代码只是一个示例。不捕捉错误的副作用真的会造成伤害吗?当然,在catch子句中没有正确处理错误 示例代码: 如果删除这样的捕获,运行的线程将由于未捕获的异常而终止。在您的示例中,行System.out.println(“内存不足后”)根本不会被打印 如果有注册,他们将被调用 在Tomcat中,用户将获得一个错误页面,具体取决于web.xml中配置的内容。如果它是默认的错误页面,则会打印完整的堆栈

如果我删除这样的捕获,那么JVM/Tomcat会有什么样的行为?我对容器线程和非容器管理线程都感兴趣,代码只是一个示例。不捕捉错误的副作用真的会造成伤害吗?当然,在catch子句中没有正确处理错误

示例代码:


如果删除这样的捕获,运行的线程将由于未捕获的异常而终止。在您的示例中,行
System.out.println(“内存不足后”)根本不会被打印

如果有注册,他们将被调用


在Tomcat中,用户将获得一个错误页面,具体取决于web.xml中配置的内容。如果它是默认的错误页面,则会打印完整的堆栈跟踪,这可能会显示敏感信息。

很多,但有一件事会让人想到:捕获InterruptedException并吞下它,而无需重新设置线程的interrupted标志。很好的一点,将其添加到这些子句中是一个很好的改进,谢谢。
new Thread() {
    public void run() {
        try{
        //Out of memory simulated
        int MAX = (int)Integer.MAX_VALUE;
        int[][][] aryNumbers = new int[MAX][MAX][MAX];
        }catch (Throwable t){
            //OOM not handled here, just empty catch clause
            System.out.println("Out of Memory");
        }
        System.out.println("After Out of Memory");
        //other valuable instructions
    }
};