一个类中静态成员变量和静态代码块执行先后的相关问题

                                                      

public class B {
	public static B t1 = new B();
	public static B t2 = new B();
	
	static {
		System.out.println("静态块");
	}
	
	{
		System.out.println("构造块");
	}

	/*
	 * 主函数
	 */
	public static void main(String[] args) {
		
	}
}

以上代码运行后的结果是多少?

先把答案写出来:   

   构造块

   构造块

   静态块

 

  1. 开始
  2. 先声明public static B t1并进行隐式的初始化 .
  3. 然后再进行显示的初始化 , 执行new B() .
  4. 运行B这个类中的构造代码块( "构造块" ) , 再运行构造方法 .
  5. 然后再声明public static B t2并进行隐式的初始化 .
  6. 然后再进行显示的初始化 , 执行new B() .
  7. 运行B这个类中的构造代码块( "构造块" ) , 再运行构造方法 .
  8. 然后加载静态代码块( "静态块" ) .
  9. 再运行main()方法 , 运行new B()
  10. 运行B这个类中的构造代码块( "构造块" ) , 再运行构造方法 .
  11. 结束

 

 

在最开始的时候jvm虚拟机会先加载main()方法所在的类 .

先将这个类中的静态成员变量加载到内存中并且只会运行一次 . ( 注意 :  将静态块视为静态成员变量( 本人理解 ) , 从上到下依次执行 ) .

 

发布了17 篇原创文章 · 获赞 5 · 访问量 1359
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章