Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/363.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在静态初始化块中使用try-catch_Java - Fatal编程技术网

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

Java 在静态初始化块中使用try-catch,java,Java,我不会在静态块中抛出任何异常 static { try { int number = Integer.parseInt("2a"); } catch (NumberFormatException e) { //log } } 为什么在这种情况下使用try-and-catch被认为是错误的 静态块不能抛出选中的异常,但仍允许抛出未选中/运行时异常 也就是说,在静态块中使用try-catch并没有本质上的错误。如上所

我不会在
静态块中抛出任何异常

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

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

静态块不能抛出选中的异常,但仍允许抛出未选中/运行时异常


也就是说,在静态块中使用try-catch并没有本质上的错误。如上所述,如果代码抛出选中的异常,这实际上是一个要求。

您不能在静态块中抛出选中的异常。

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

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

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

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

第三个和最后一个选项是设置指示故障的标志。稍后,构造函数可以检查标志并抛出异常,或者在极少数情况下重试

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


有关静态块的更多详细信息,请访问链接。

这里回答了您的问题:谁说它被认为是错误的?不一定总是错的,这就是为什么静态块不能抛出异常。我明白。我没有任何例外,为什么要投否决票?这真的很糟糕吗?我同意@Jesper,你为什么认为这是错误的?是的,你可以扔它们,只要你抓住它们。就像OP在这里做的一样。你不能做的是把它们扔出静态块。但这无关紧要,因为这不是OP在做什么。