标签:android blog ar sp java on div 2014 问题
static { }2. 非静态代码块
{ }静态代码块和非静态代码块的异同点如下:
public class InitOderTest { public static String STATIC_FIELD = "静态属性"; // 静态块 static { System.out.println(STATIC_FIELD); System.out.println("静态代码块"); } public String field = "非静态属性"; // 非静态块 { System.out.println(field); System.out.println("非静态代码块"); } public InitOderTest() { System.out.println("无参构造函数"); } public static void main(String[] args) { InitOderTest test = new InitOderTest(); } }执行结果:
静态属性 静态代码块 非静态属性 非静态代码块 无参构造函数接下来,我们验证一下,当Java类实现继承后,执行顺序是否和我们的结论吻合。测试代码如下:
class ParentTest { public static String PARENT_STATIC_FIELD = "父类-静态属性"; // 父类-静态块 static { System.out.println(PARENT_STATIC_FIELD); System.out.println("父类-静态代码块"); } public static String parentField = "父类-非静态属性"; // 父类-非静态块 { System.out.println(parentField); System.out.println("父类-非静态代码块"); } public ParentTest() { System.out.println("父类—无参构造函数"); } } public class InitOderTest extends ParentTest { public static String STATIC_FIELD = "静态属性"; // 静态块 static { System.out.println(STATIC_FIELD); System.out.println("静态代码块"); } public String field = "非静态属性"; // 非静态块 { System.out.println(field); System.out.println("非静态代码块"); } public InitOderTest() { System.out.println("无参构造函数"); } public static void main(String[] args) { InitOderTest test = new InitOderTest(); } }执行结果如下:
父类-静态属性 父类-静态代码块 静态属性 静态代码块 父类-非静态属性 父类-非静态代码块 父类—无参构造函数 非静态属性 非静态代码块 无参构造函数通过程序验证,可以看出我们的结论是准确的。
Java类静态属性、静态块、非静态属性、非静态块、构造函数在初始化时的执行顺序
标签:android blog ar sp java on div 2014 问题
原文地址:http://blog.csdn.net/wzy_1988/article/details/41932461