昨天参加了阿里的笔试,有一个选做题,考了java中类的各个成员的执行顺序,小结了一下,希望对大家有帮助
属性、方法、构造方法和自由块都是类中的成员,在创建对象时,各成员的执行顺序如下:
(1)父类静态成员和静态初始化块,按在代码中出现的顺序依次执行。
(2)子类静态成员和静态初始化块,按在代码中出现的顺序依次执行。
(3)父类实例成员和实例初始化块,按在代码中出现的顺序依次执行。
(4)执行父类构造方法。
(5)子类实例成员和实例初始化块,按在代码中出现的顺序依次执行。
(6)执行子类构造方法。
例如:
public class Parent {
{
System.out.println("parent {}code");
}
static{
System.out.println("parent static");
}
private static int i = printA("i");
private static int j = printA("i");
public Parent(){
System.out.println("parent constructor");
}
private static int printA(String string) {
// TODO Auto-generated method stub
System.out.println("i = "+i);
return 3;
}
public static void main(String[] args) {
// TODO Auto-generated method stub
new son();
}
}
class son extends Parent{
{
System.out.println("son {}code");
}
static{
System.out.println("son static");
}
private static int i = printA("i");
private static int j = printA("i");
public son(){
System.out.println("son constructor");
}
private static int printA(String string) {
// TODO Auto-generated method stub
System.out.println("i = "+i);
return 3;
}
}
输出是:
parent static
i = 0
i = 3
son static
i = 0
i = 3
parent {}code
parent constructor
son {}code
son constructor