在静态初始化块中使用try catch

时间:2014-05-28 06:49:01

标签: java

我没有从static块中抛出任何异常。

static 
{
    try
    {
        int number = Integer.parseInt("2a");
    }
    catch (NumberFormatException e)
    {
        //log
    }
}

为什么在这种情况下使用try和catch被认为是错误的?

2 个答案:

答案 0 :(得分:3)

静态块不能抛出已检查的异常,但仍允许抛出未经检查的/运行时异常。

也就是说,在静态块中使用try catch没有任何内在错误。如上所述,如果代码抛出已检查的异常,这实际上是一个要求。

答案 1 :(得分:2)

You cannot throw Checked Exceptions in Static block

在方法中,可以通过传递异常或处理异常来处理异常。但在静态块代码中,您无法以这种方式处理异常。

一般来说,处理它的一种干净方法是使用try-catch块,但是由于我们没有这个选项,所以让我们看一下可用的三个选项。

第一个:在记录异常之后抛出一个RuntimeException,它将结束当前线程(除非第一次在类上实例化/调用静态方法的代码捕获)。

第二个正在调用System.exit(1),但在像servlet这样的托管环境中这是不可取的。此选项仅适用于java应用程序,并且仅当静态初始化程序块执行某些关键操作(没有程序无法成功运行)时才会加载数据库驱动程序。

第三次,最后一个选项是设置一个表示失败的标志。之后,构造函数可以检查标志并抛出异常或在极少数情况下重试。

最后,如果操作对程序的运行不重要,那么可能只需要一个简单的日志条目。

有关静态块的更多详细信息,请通过this链接。