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类静态属性、静态块、非静态属性、非静态块、构造函数在初始化时的执行顺序
原文:http://blog.csdn.net/wzy_1988/article/details/41932461