0
点赞
收藏
分享

微信扫一扫

Java类中字段和方法的初始化顺序(包含static)


Java类中字段和方法的初始化顺序(包含static)

<span style="font-family:Times New Roman;font-size:14px;">package cm.java.Practic5;

class Bowl {
Bowl(int marker) {
System.out.println("Bowl(" + marker + ")");
}

void f1(int marker) {
System.out.println("f1(" + marker + ")");
}
}

class Table {
static Bowl bowl1 = new Bowl(1);

Table() {
System.out.println("Table()");
bowl2.f1(1);
}

void f2(int marker) {
System.out.println("f2(" + marker + ")");
}

static Bowl bowl2 = new Bowl(2);
}

class Cupboard {
Bowl bowl3 = new Bowl(3);
static Bowl bowl4 = new Bowl(4);

public Cupboard() {
System.out.println("Cupboard()");
bowl4.f1(2);
}

void f3(int marker) {
System.out.println("f3(" + marker + ")");
}

static Bowl bowl5 = new Bowl(5);
}

public class InitRelatedP95 {
public static void main(String[] args) {
System.out.println("Creating new cupboard() in main");
new Cupboard();
System.out.println("Creating new cupboard() in main");
new Cupboard();
table.f2(1);
cupboard.f3(1);
}

static Table table = new Table();
static Cupboard cupboard = new Cupboard();
}

/*
output:

Bowl(1)
Bowl(2)
Table()
f1(1)
Bowl(4)
Bowl(5)
Bowl(3)
Cupboard()
f1(2)
Creating new cupboard() in main
Bowl(3)
Cupboard()
f1(2)
Creating new cupboard() in main
Bowl(3)
Cupboard()
f1(2)
f2(1)
f3(1)

*/
</span>



上面是一段程序,运行的结果,我也贴出来了,根据这个输出结果就可以看出JAVA中的初始化顺序:

主题思想就是:先静态对象而后非静态对象,静态对象只能初始化一次,类中的数据成员按顺序初始化。

1:


static Table table = new Table();

 Table对象初始化,进入到Table中,按顺序初始化两个静态Bowl

static Bowl bowl1 = new Bowl(1);//输出Bowl(1)
static Bowl bowl2 = new Bowl(2);//输出Bowl(2)

然后,Table()本身构造函数初始化:

Table() {
System.out.println("Table()");
bowl2.f1(1);
}
//输出Table()
//输出f1(1)

这里总共输出了:

Bowl(1)
Bowl(2)
Table()
f1(1)


2:


static Cupboard cupboard = new Cupboard();

Cupboard对象初始化,进入到Cupboard中,按顺序初始化两个静态Bowl

static Bowl bowl4 = new Bowl(4);//输出Bowl(4)
static Bowl bowl5 = new Bowl(5);//输出Bowl(5)

然后,数据成员初始化,即:


Bowl bowl3 = new Bowl(3);//输出Bowl(3)

接着,Cupboard()本身构造函数初始化:

public Cupboard() {
System.out.println("Cupboard()");
bowl4.f1(2);
}
//输出Cupboard()
//输出f1(2)


这里总共输出了:

Bowl(4)
Bowl(5)
Bowl(3)
Cupboard()
f1(2)



3

进入到main函数,main也是static的方法,按顺序执行:

System.out.println("Creating new cupboard() in main");
//输出Creating new cupboard() in main


new Cupboard();

Cupboard对象初始化,进入到Cupboard中:

两个静态Bowl,已经初始化过,无需再次初始化;

然后,数据成员初始化,即:


Bowl bowl3 = new Bowl(3);//输出Bowl(3)

接着,Cupboard()本身构造函数初始化:

public Cupboard() {
System.out.println("Cupboard()");
bowl4.f1(2);
}
//输出Cupboard()
//输出f1(2)

System.out.println("Creating new cupboard() in main");
//输出Creating new cupboard() in main

new Cupboard();

Cupboard对象初始化,进入到Cupboard中:

两个静态Bowl,已经初始化过,无需再次初始化;

然后,数据成员初始化,即:


Bowl bowl3 = new Bowl(3);//输出Bowl(3)

接着,Cupboard()本身构造函数初始化:

public Cupboard() {
System.out.println("Cupboard()");
bowl4.f1(2);
}
//输出Cupboard()
//输出f1(2)



table.f2(1);
//调用table.f2(1);,输出f2(1)

cupboard.f3(1);
//调用cupboard.f3(1);,输出f3(1);


这里总共输出了:

Creating new cupboard() in main
Bowl(3)
Cupboard()
f1(2)
Creating new cupboard() in main
Bowl(3)
Cupboard()
f1(2)
f2(1)
f3(1)



所以结果,如上述output所述。

举报

相关推荐

0 条评论