当前位置: 首页 > 面试题库 >

Java为什么不允许从静态初始化块中引发检查异常?

邰德业
2023-03-14
问题内容

Java为什么不允许从静态初始化块中引发检查异常?这个设计决定背后的原因是什么?


问题答案:

因为无法在源中处理这些检查的异常。您对初始化过程没有任何控制,并且无法从源代码中调用static {}块,因此可以用try-catch包围它们。

由于您无法处理检查异常指示的任何错误,因此决定禁止抛出检查异常静态块。

静态块不得抛出已检查的异常,但仍允许引发未检查的/运行时异常。但是根据上述原因,您也将无法处理这些问题。

总而言之,此限制可防止(或至少使开发人员更难)构建可能会导致错误的应用程序无法恢复的东西。



 类似资料:
  • 我遇到了下面的Java代码,起初看起来不错,但从未编译过: 下面是IDE :变量USER_ID可能已分配的错误消息。 将值赋值给静态最终变量有问题吗?

  • 问题内容: 据我了解,“静态初始化块”用于设置静态字段的值(如果无法在一行中完成的话)。 但是我不明白为什么我们需要为此设置一个特殊的块。例如,我们将字段声明为静态(无值分配)。然后编写几行代码,生成并为上面声明的静态字段分配一个值。 为什么我们需要在这样一个特殊的块这样的行:? 问题答案: 在非静态块: 每次构造类的实例时被调用。在静态块只被调用一次,当类本身初始化,无论该类型的有多少对象创建。

  • 问题内容: 块内初始化之间有什么区别: 以及单独的静态初始化: 问题答案: 静态初始化块允许更复杂的初始化,例如使用条件: 或者,当需要的不仅仅是构造时:使用构建器创建实例时,除了创建静态字段之外,还必须进行异常处理或其他工作。 静态初始化块也在内联静态初始化器之后运行,因此以下内容有效:

  • 问题内容: 这是一段Java代码: 它如何编译?初始化后已执行变量“ ture”的声明。据我所知,静态块和字段已经按照它们出现的顺序执行了。 现在,为什么实例块中的值9已被打印3次?顺便说一句,该类的实例已创建了3次。那不是功课,我正在学习Java进行认证。 问题答案: 关于第一个问题,静态块确实按照它们出现的顺序进行处理,但是在处理静态块之前,先处理声明。声明作为类 准备工作 的一部分(JLS§

  • 初始化的区别是什么:1)int i=47;或2)int i;{i=47;在哪些情况下我们需要第一个或第二个?

  • 在信号量(java.util.concurrent.Semaphore)初始化期间,我没有得到负许可背后的基本原理。 我知道调用release()方法最终可能会使信号量的许可证大于等于1( 然而,我没有得到任何实际的用例,在这种情况下,我将使用负许可初始化信号量。 参考样本代码: