Java解惑 -- 读书笔记 -- 异常迷题

来源:互联网 发布:库卡机械手编程 编辑:程序博客网 时间:2024/06/06 00:01

36 --  关于try..finally

finally语句块总是在控制权离开try语句块时执行的

 

 

 

37.非常不可思议

 

38.对静态常量的延迟初始化(这个问题我也遇到过,茅塞顿开,- -)

 

结果解析:USER_ID域是一个空final(blank final),它是一个在声明中没有进行初始化操作的final域[JLS 4.12.4]。在程序中,一个空final域只有在它是明确未赋过值的地方才可以被赋值。规范长篇大论,对此术语提供了一个准确的但保守的定义[JLS 16]。因为它是保守的,所以编译器必须拒绝某些可以证明是安全的程序。这个谜题就展示了这样的一个程序。

 

扩展提示:要确定一个程序是否可以不止一次地对一个空final进行赋值是一个很困难的问题

 

解决方案:

 

 

39.finally不执行的情况

 

try{

    System.exit(0);

}finally{

}

 

40.抛出异常的对象构造

结果是什么?

当你调用一个构造器时,实例变量的初始化操作将先于构造器的程序体而运行[JLS 12.5]。

与大多数抛出StackOverflowError异常的程序一样,本程序也包含了一个无限递归

 

 

 

 

原创粉丝点击