Java异常处理 - 捕获超类异常

时间:2012-09-13 15:22:15

标签: java exception exception-handling

我有一个关于在Web应用程序中处理异常的问题。我经常听到抓住超类异常是一个坏主意。

我经常编写代码来捕获struts action / java servlet类中的所有异常。

try {
     // call business facade
     // business facade calls DAO
     // any exception from DAO bubbles up 
} catch (Exception e) {
  log.error("error", e);
}

如果我们没有捕获超类Exception。我们如何处理任何意外的运行时错误并将其妥善记录

4 个答案:

答案 0 :(得分:6)

您可以setup a DefaultUncaughtExceptionHandler为您的项目处理未捕获的异常。例如,这是我在其中一个项目中的一段代码:

private static void setDefaultUncaughtExceptionHandler() {
    try {
        Thread.setDefaultUncaughtExceptionHandler(new Thread.UncaughtExceptionHandler() {

            @Override
            public void uncaughtException(Thread t, Throwable e) {
                logger.error("Uncaught Exception detected in thread {}", t, e);
            }
        });
    } catch (SecurityException e) {
        logger.error("Could not set the Default Uncaught Exception Handler", e);
    }
}

答案 1 :(得分:2)

在网络应用程序中,以及您发布的代码段中,您如何处理根Exception?它看起来像你抓住它,记录它,继续前进。

在99%的webapp案例中,最好允许Exception冒泡到web.xml中配置的<error-page>

如果你在“调用业务外观”时发现一个未知错误,那么你似乎不太可能发现一个未知错误,那就是你的应用程序最好继续使用其余的逻辑进行卡车运输。

答案 2 :(得分:1)

添加多个catch块并将Exception catch作为最后一个。

try {
     // call business facade
     // business facade calls DAO
     // any exception from DAO bubbles up 
} catch(SuperClassException se)
{
//Do what you want to do when this exception happens.
}catch (Exception e) {
  log.error("error", e);
}

答案 3 :(得分:0)

try里面的代码主要指定并标记可以捕获的已检查异常。此外,查看内部代码尝试您可以直接针对失败案例的情况,因此可以添加未经检查/运行时异常捕获块。