Java中类的初始化顺序是什么?

如题所述

执行顺序应该是:首先是父类静态块 --> 然后是子类静态块 --> 父类自由块 --> 父类构造函数块 --> 子类自由块 --> 子类构造函数块
温馨提示:答案为网友推荐,仅供参考
第1个回答  推荐于2016-10-18
这个是我自己总结的,希望对你有帮助~!

1. 父类static(顺序按照代码书写顺序进行)
2. 子类static(顺序按照代码书写顺序进行)
3. 父类非static域、构造器(顺序按照代码书写顺序进行)
4. 子类非static域、构造器(顺序按照代码书写顺序进行)本回答被网友采纳
第2个回答  2010-11-19
我做了个测试:
class A
{
public A()
{
System.out.println("----------A 构造-------------");
}
static
{
System.out.println("----------A 静态块-------------");
}
{
System.out.println("----------A 语句块-------------");
}
}

class B extends A
{
public B()
{
System.out.println("----------B 构造-------------");
}
static
{
System.out.println("----------B 静态块-------------");
}
{
System.out.println("----------B 语句块-------------");
}
}

public class Test
{
public static void main(String[] args)
{
B b=new B();
}
}
输出为:
----------A 静态块-------------
----------B 静态块-------------
----------A 语句块-------------
----------A 构造-------------
----------B 语句块-------------
----------B 构造-------------

所以顺序为父类静态块->子类静态块->父类自由块->父类构造->子类自由块->子类构造,原因是类加载器初次加载class时会调用静态块,之后就是先构造父类然后子类。
我将主方法修改:
public class Test
{
public static void main(String[] args)
{
B b=new B();
B b1=new B();
}
}
则输出为:
----------A 静态块-------------
----------B 静态块-------------
----------A 语句块-------------
----------A 构造-------------
----------B 语句块-------------
----------B 构造-------------
----------A 语句块-------------
----------A 构造-------------
----------B 语句块-------------
----------B 构造-------------
以上代码说明了这种调用顺序
相似回答