在Java类被new的过程当中,执行顺序以下:函数
在实现继承的类被new的过程当中,初始化执行顺序以下:测试
1. 静态代码块:code
static {
} 继承
2. 非静态代码块it
{
} class
静态代码块和非静态代码块的异同点以下:test
public
class
InitOderTest {
变量
public
static
String STATIC_FIELD =
"静态属性"
;
构造函数
// 静态块
static
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();
}
}
执行结果:
public class ParentTest {
public static String PARENT_STATIC_FIELD = "父类-静态属性";
// 父类-静态块
static {
System.out.println(PARENT_STATIC_FIELD);
System.out.println("父类-静态代码块");
}
public 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) {
new InitOderTest();
new InitOderTest();
}
}
执行结果以下: