java 对象是如何进行初始化的,新建一printclass.java文件如下(包括类printclass以及a和其子类b),编译运行其中的main方法,
public class printclass {
public static void main(string[] args){
new b();
}
printclass(string var) {
system.out.println(var);
}
}
class a {
static printclass pclassa1 = new printclass("a. 静态成员的初始化1");
static {
system.out.println("a. 静态初始化块1");
}
static {
system.out.println("a. 静态初始化块2");
}
static printclass pclassa2 = new printclass("a. 静态成员的初始化2");
{
system.out.println("a. 实例初始化块1");
}
printclass pclassa = new printclass("a. 实例成员的初始化");
{
system.out.println("a. 实例初始化块2");
}
public int avar;
public a() {
system.out.println("a. 构造方法");
dosomething();
}
private void dosomething() {
// public void dosomething() {
avar = 1111;
system.out.println("avar=" + avar);
}
}
//class b extends a
class b extends a
{
public static void main(string[] args){
new b();
}
public int bvar = 2222;
{
system.out.println("b. 实例初始化块1");
}
{
system.out.println("b. 实例初始化块2");
}
printclass pclassb = new printclass("b. 实例成员的初始化");
static {
system.out.println("b. 静态初始化块1");
}
static printclass pclassb1 = new printclass("b. 静态成员的初始化1");
static printclass pclassb2 = new printclass("b. 静态成员的初始化2");
static {
system.out.println("b. 静态初始化块2");
}
public b() {
system.out.println("b. 构造方法");
dosomething();
}
public void dosomething() {
system.out.println("bvar=" + bvar);
}
}
可以看到运行结果为:
a. 静态成员的初始化1
a. 静态初始化块1
a. 静态初始化块2
a. 静态成员的初始化2
b. 静态初始化块1
b. 静态成员的初始化1
b. 静态成员的初始化2
b. 静态初始化块2
a. 实例初始化块1
a. 实例成员的初始化
a. 实例初始化块2
a. 构造方法
avar=1111
b. 实例初始化块1
b. 实例初始化块2
b. 实例成员的初始化
b. 构造方法
bvar=2222
由此可知当新建一java对象(上面main方法中new b())时,它的内部初始化顺序为:
1. 父类静态成员和静态初始化块 ,按在代码中出现的顺序依次执行
2. 子类静态成员和静态初始化块 ,按在代码中出现的顺序依次执行
3. 父类实例成员和实例初始化块 ,按在代码中出现的顺序依次执行
4. 父类构造方法
5. 子类实例成员和实例初始化块 ,按在代码中出现的顺序依次执行
6. 子类构造方法
闽公网安备 35060202000074号