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) { } }
以上代码运行后的结果是多少?
先把答案写出来:
构造块
构造块
静态块
- 开始
- 先声明public static B t1并进行隐式的初始化 .
- 然后再进行显示的初始化 , 执行new B() .
- 运行B这个类中的构造代码块( "构造块" ) , 再运行构造方法 .
- 然后再声明public static B t2并进行隐式的初始化 .
- 然后再进行显示的初始化 , 执行new B() .
- 运行B这个类中的构造代码块( "构造块" ) , 再运行构造方法 .
- 然后加载静态代码块( "静态块" ) .
- 再运行main()方法 , 运行new B()
- 运行B这个类中的构造代码块( "构造块" ) , 再运行构造方法 .
- 结束
在最开始的时候jvm虚拟机会先加载main()方法所在的类 .
先将这个类中的静态成员变量加载到内存中并且只会运行一次 . ( 注意 : 将静态块视为静态成员变量( 本人理解 ) , 从上到下依次执行 ) .