\n如何在Java的静态块中抛出异常?\n


静态块是一组语句,将在JVM执行main()方法之前执行。如果在类加载时想要执行任何操作,则必须在静态块内定义该操作,因为此块在类加载时执行。

从静态块抛出异常

  • 静态块只能抛出运行时异常,或者应该使用try和catch块来捕获检查异常
  • 静态块在类加载器加载类时发生。代码可以以静态块的形式出现,也可以作为静态方法的调用来初始化静态数据成员。
  • 在这两种情况下,编译器都不允许检查异常。当发生未检查异常时,它会被ExceptionInInitializerError包装,然后在触发类加载的线程的上下文中抛出。
  • 尝试从静态块抛出检查异常也是不可能的。我们可以在静态块中使用try和catch块,其中检查异常可能从try块抛出,但必须在catch块中解决它。我们不能使用throw关键字进一步传播它。

示例

在线演示

public class StaticBlockException {
   static int i, j;
   static {
      System.out.println("In the static block");
      try {
         i = 0;
         j = 10/i;
      } catch(Exception e){
         System.out.println("Exception while initializing" + e.getMessage());
         throw new RuntimeException(e.getMessage());
      }
   }
   public static void main(String args[]) {
      StaticBlockException sbe = new StaticBlockException();
      System.out.println("In the main() method");
      System.out.println("Value of i is : "+i);
      System.out.println("Value of j is : "+ j);
   }
}

输出

In the static block
Exception while initializing/ by zero
Exception in thread "main" java.lang.ExceptionInInitializerError
Caused by: java.lang.RuntimeException: / by zero
        at StaticBlockException.(StaticBlockException.java:10)

更新于:2019年7月30日

5K+ 次浏览

启动你的职业生涯

完成课程获得认证

开始学习
广告