java类静态初始化问题
所属分类 java
浏览量 900
public class StaticInitTest {
private static final String value;
static {
// The blank final field value may not have been initialized
// 为何这里不能取值 ,init 方法里可以取值 ?
// 代码1
// System.out.println("value.1="+value);
init();
System.out.println("before value set");
value = "hello";
System.out.println("after value set");
System.out.println("value.3="+value);
System.out.println("static block done");
}
private static void init() {
// 不能在静态初始化方法里赋值 ,只能在静态块里赋值
// value = "hello";
System.out.println("init run");
// 静态块里未赋值前不能取值,但这里可以取值,取出来是 null
// 代码2
System.out.println("value.2="+value);
}
public static void main(String[] args) throws Exception {
}
}
init run
value.2=null
before value set
after value set
value.3=hello
static block done
问题
代码1
为何这里不能取值 ,init 方法里可以取值 ?
在静态块不能读取未赋值的final静态变量 应该是编译器加的限制
代码2
静态块里未赋值前不能取值,但这里为何可以 ? 取出来是 null
在执行方法前 调用了默认的静态构造函数 赋了null值 第一次读到了null ,
然后再执行静态块的代码 赋值 ,于是第二次读到了 hello
上一篇
下一篇
深入理解java虚拟机笔记
classpath资源读取问题
影响商业的50本书第30到35本
影响商业的50本书第36到42本
c语言hello
c++ hello