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异常的程序一样,本程序也包含了一个无限递归