对静态代码块执行时机的认识
类的生命周期包括加载(Loading)、验证(Verification)、准备(Preparation)、解析(Resolution)、初始化(Initialization)、使用(Using)、卸载(Unloading)等七个阶段,其中验证、准备和解析三个部分统称为连接(Linking)。而类的加载指的就是从加载到初始化这五个阶段。
初始化的时候会包含静态代码块的执行和静态变量的赋值
初始化在装载时不是必须触发的,保证在初次主动使用对象前会触发。
-
例:
class A{ static{ System.out.print("1"); } public A(){ System.out.print("2"); } } class B extends A{ static{ System.out.print("a"); } public B(){ System.out.print("b"); } } public class Hello { /** * @param args */ public static void main(String[] args) { // TODO Auto-generated method stub A ab = new B(); ab = new B(); } }
输出结果: 1a2b2b
静态代码块和非静态代码块的区别
静态代码块,在虚拟机加载类的时候就会加载执行,而且只执行一次;
非静态代码块,在创建对象的时候(即new一个对象的时候)执行,每次创建对象都会执行一次
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。