java类中的初始化顺序

在创建java类的对象时,类中各成员的执行顺序:
1.父类静态成员和静态初始化快,按在代码中出现的顺序依次执行。
2.子类静态成员和静态初始化块,按在代码中出现的顺序依次执行。
3. 父类的实例成员和实例初始化块,按在代码中出现的顺序依次执行。
4.执行父类的构造方法。
5.子类实例成员和实例初始化块,按在代码中出现的顺序依次执行。

6.执行子类的构造方法。

public class Test{
public static void main(String[] args) {
Son s = new Son();
}
}
class Parent {
{
System.out.println("parent中的初始化块");
}
static {
System.out.println("parent中static初始化块");
}
public Parent() {
System.out.println("parent构造方法");
}
}
class Son extends Parent {
{
System.out.println("son中的初始化块");
}
static {
System.out.println("son中的static初始化块");
}
public Son() {
System.out.println("son构造方法");
}

}

执行结果如下:

parent中static初始化块
son中的static初始化块
parent中的初始化块
parent构造方法
son中的初始化块

son构造方法

静态初始化块和非静态初始化块的区别?
非静态初始化块主要是用于对象的初始化操作,在每次创建对象的时都要调用一次,其执行顺序在构造方法之前。

在初始化块之前有static修饰,则为静态初始化块。由于非静态成员不能在静态方法中使用,同样也不能在静态初始化块中,因此,静态初始化块主要用于初始化静态变量和静态方法,静态初始化块只调用一次,是在类的第一次加载到内存时,并非一定要创建对象才执行,静态初始化块比非静态初始化块先执行。

转自:https://blog.csdn.net/lgfeng218/article/details/7606735

猜你喜欢

转载自blog.csdn.net/wang1253/article/details/80241665