首页  

java类静态初始化问题     所属分类 java 浏览量 51
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