我没有从static
块中抛出任何异常。
static
{
try
{
int number = Integer.parseInt("2a");
}
catch (NumberFormatException e)
{
//log
}
}
为什么在这种情况下使用try和catch被认为是错误的?
答案 0 :(得分:3)
静态块不能抛出已检查的异常,但仍允许抛出未经检查的/运行时异常。
也就是说,在静态块中使用try catch没有任何内在错误。如上所述,如果代码抛出已检查的异常,这实际上是一个要求。
答案 1 :(得分:2)
You cannot throw Checked Exceptions in Static block
在方法中,可以通过传递异常或处理异常来处理异常。但在静态块代码中,您无法以这种方式处理异常。
一般来说,处理它的一种干净方法是使用try-catch块,但是由于我们没有这个选项,所以让我们看一下可用的三个选项。
第一个:在记录异常之后抛出一个RuntimeException,它将结束当前线程(除非第一次在类上实例化/调用静态方法的代码捕获)。
第二个正在调用System.exit(1),但在像servlet这样的托管环境中这是不可取的。此选项仅适用于java应用程序,并且仅当静态初始化程序块执行某些关键操作(没有程序无法成功运行)时才会加载数据库驱动程序。
第三次,最后一个选项是设置一个表示失败的标志。之后,构造函数可以检查标志并抛出异常或在极少数情况下重试。
最后,如果操作对程序的运行不重要,那么可能只需要一个简单的日志条目。
有关静态块的更多详细信息,请通过this链接。