`

Java 静态块抛异常之后

阅读更多

一 背景

一直以为Java静态块抛异常,没人捕获,虚拟机会推出,要不是最近debug到异常的执行流程,观念还正不了,自己看吧。

 

二 代码

(1)静态块抛异常类

/**
 * 静态块抛异常类
 */
public class App {

    static {
        System.out.println("static start !=============");
        if (true) {
            throw new RuntimeException("static test");
        }
        System.out.println("static finiah!=============");
    }

    public static void hello() {
        System.out.println("hello ! ");
    }
}

 

(2)调用类

/**
 * 调用静态块
 */
public class TestApp {
    public static void main(String[] args) {
        try {
            App.hello();
        } catch (Throwable e) {
            System.err.println("excepiton1 start : =========" );
            e.printStackTrace();
            System.err.println("excepiton1 finish! =========");
        }

        System.err.println("--------------------------------");
        try {
            App.hello();
        } catch (Throwable e) {
            System.err.println("excepiton2 start ! =========");
            e.printStackTrace();
            System.err.println("excepiton2 finish! =========");
        }
    }
}

 

三 执行结果

 

static start !=============
excepiton1 start : =========
java.lang.ExceptionInInitializerError
	at x.test.TestApp.main(TestApp.java:9)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
	at java.lang.reflect.Method.invoke(Method.java:498)
	at com.intellij.rt.execution.application.AppMain.main(AppMain.java:147)
Caused by: java.lang.RuntimeException: static test
	at x.test.App.<clinit>(App.java:11)
	... 6 more
excepiton1 finish! =========
--------------------------------
excepiton2 start ! =========
java.lang.NoClassDefFoundError: Could not initialize class x.test.App
	at x.test.TestApp.main(TestApp.java:18)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
	at java.lang.reflect.Method.invoke(Method.java:498)
	at com.intellij.rt.execution.application.AppMain.main(AppMain.java:147)
excepiton2 finish! =========

 

四 说明

1)静态块在类首次使用时加载类后调用,如果调用过程产生异常,会抛到首次调用处,可以捕获。

2)后续调用该类,会出现找不到类异常

分享到:
评论

相关推荐

    JAVA面试题最全集

    如果抛出一个异常,那么相匹配的 catch 子句就会执行,然后控制就会进入 finally 块(如果有的话)。 finalize?方法名。Java 技术允许使用 finalize() 方法在垃圾收集器将对象从内存中清除出去之前做必要的...

    java 面试题 总结

    java编译器要求方法必须声明抛出可能发生的非运行时异常,但是并不要求必须声明抛出未被捕获的运行时异常。 6、说出Servlet的生命周期,并说出Servlet和CGI的区别。 Servlet被服务器实例化后,容器运行其init方法,...

    Java 语言基础 —— 非常符合中国人习惯的Java基础教程手册

    因此,对象名(变量)实际上存放的是一个被实例化之后的对象所占有的内存区域 的指针。 例如: type objectName = new type ( [paramlist] ); 运算符 new 为对象分配内存空间 ,实例化一个对象 。new 调用对象的构造...

    超级有影响力霸气的Java面试题大全文档

    java编译器要求方法必须声明抛出可能发生的非运行时异常,但是并不要求必须声明抛出未被捕获的运行时异常。 9、说出Servlet的生命周期,并说出Servlet和CGI的区别。  Servlet被服务器实例化后,容器运行其init方法...

    java经典面试2010集锦100题(不看你后悔)

    JAVA试题(100道) —————————————————————————————————————— 题目1: 下面不属于基本类型的是:c (选择1项) A) boolean B) long C) String D) byte 题目2:d 如下程序中:...

    net学习笔记及其他代码应用

    不能有抽象构造函数或抽象静态方法。Abstract 类的子类为它们父类中的所有抽象方法提供实现,否则它们也是抽象类为。取而代之,在子类中实现该方法。知道其行为的其它类可以在类中实现这些方法。 接口(interface)...

    Visual C++ 2010入门经典(第5版)--源代码及课后练习答案

    6.3.1 抛出异常 253 6.3.2 捕获异常 254 6.3.3 MFC中的异常处理 255 6.4 处理内存分配错误 256 6.5 函数重载 257 6.5.1 函数重载的概念 258 6.5.2 引用类型和重载选择 260 6.5.3 何时重载函数 260 6.6 函数...

    JDT生成代码实例

    String[] imports = {"java.util.Date", "java.util.Random"}; for(String imp : imports){ //创建一个新包声名 ImportDeclaration importDeclaration = ast.newImportDeclaration(); //添加包说明 ...

    Visual C++ 2005入门经典--源代码及课后练习答案

    6.3.1 抛出异常 255 6.3.2 捕获异常 256 6.3.3 MFC中的异常处理 257 6.4 处理内存分配错误 258 6.5 函数重载 259 6.5.1 函数重载的概念 260 6.5.2 何时重载函数 262 6.6 函数模板 262 6.7 使用...

    C#微软培训资料

    11.3 静态和非静态的方法.129 11.4 方法的重载.130 11.5 操作符重载.134 11.6 小 结.137 第十二章 域 和 属 性 .139 12.1 域 .139 12.2 属 性 .143 12.3 小 结 .146 第十三章 事件和索引指示器 .148 ...

Global site tag (gtag.js) - Google Analytics