java类的初始化和实例化
1、面试题
Father.java
package org.example.classinit;
public class Father {
private int i = test();
private static int j = method();
static {
System.out.println("Father 静态块 = (1)");
}
public Father(){
System.out.println("Father 构造器 = (2)");
}
{
System.out.println("Father 代码块 = (3)");
}
private int test() {
System.out.println("Father 成员方法 test() = (4)");
return 0;
}
private static int method() {
System.out.println("Father 类方法 method() = (5)");
return 0;
}
}
Son.java
package org.example.classinit;
public class Son extends Father{
private int i = test();
private static int j = method();
static {
System.out.println("Son 静态块 = (6)");
}
public Son(){
System.out.println("Son 构造器 = (7)");
}
{
System.out.println("Son 代码块 = (8)");
}
private int test() {
System.out.println("Son 成员方法 test() = (9)");
return 0;
}
private static int method() {
System.out.println("Son 类方法 method() = (10)");
return 0;
}
}
SonTest.java
package org.example.classinit;
import org.junit.Test;
public class SonTest {
@Test
public void test01(){
Son s1 = new Son();
System.out.println("-------------");
Son s2 = new Son();
}
}
2、结果
Father 类方法 method() = (5)
Father 静态块 = (1)
Son 类方法 method() = (10)
Son 静态块 = (6)
Father 成员方法 test() = (4)
Father 代码块 = (3)
Father 构造器 = (2)
Son 成员方法 test() = (9)
Son 代码块 = (8)
Son 构造器 = (7)
-------------
Father 成员方法 test() = (4)
Father 代码块 = (3)
Father 构造器 = (2)
Son 成员方法 test() = (9)
Son 代码块 = (8)
Son 构造器 = (7)