Java类中字段和方法的初始化顺序(包含static)
2015-10-30 16:32
453 查看
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)
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)
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所述。
<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所述。
相关文章推荐
- java对世界各个时区(TimeZone)的通用转换处理方法(转载)
- java-注解annotation
- java-模拟tomcat服务器
- java-用HttpURLConnection发送Http请求.
- java-WEB中的监听器Lisener
- Android IPC进程间通讯机制
- Android Native 绘图方法
- Android java 与 javascript互访(相互调用)的方法例子
- 介绍一款信息管理系统的开源框架---jeecg
- 聚类算法之kmeans算法java版本
- java实现 PageRank算法
- PropertyChangeListener简单理解
- 插入排序
- 冒泡排序
- 堆排序
- 快速排序
- 二叉查找树
- [原创]java局域网聊天系统