栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

静态数据的初始化

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

静态数据的初始化

静态数据的初始化
java编程思想中用这段代码来展示静态数据的初始化过程,一开始没看懂,现在来仔细分析一遍吧。

class Bowl{
	Bowl(int marker) {
		// TODO Auto-generated constructor stub
		System.out.println("Bowl("+marker+")");
	}
	void f1(int marker) {
		System.out.println("f1("+marker+")");
	}
}
class Tabel{
	static Bowl bowl=new Bowl(1);
	Tabel() {
		System.out.println("Tabel()");
		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);
	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 StaticInitialization {
	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 Tabel table=new Tabel();
	static Cupboard cupboard=new Cupboard();
}

下面是运行结果

Bowl(1)
Bowl(2)
Tabel()
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)

分析结果前你要知道的:
(1) 初始化顺序是 先静态对象,而后是非静态对象
(2) 静态初始化只在Class对象首次加载的时候进行一次
(3) 类的内部,变量定义的先后顺序决定了初始化的顺序。变量会在任何方法(包括构造器)被调用之前得到初始化。

程序首先进入main方法,初始化StaticInitialization,StaticInitialization有两个静态域 table,cupboard,随后这两个静态域对应的类也被加载,由于这两个类包含静态对象Bowl对象,所以Bowl也被加载。

初始化Tabel:先初始化bowl1,bowl2 输出 Bowl(1) Bowl(2)
调用构造器Tabel() 输出 Tabel() f1(1)

初始化Cupboard:初始化静态对象 bowl4,bowl5,接着按照顺序初始化第一个非静态对象 bowl3,调用构造器Cupboard() 输出Bowl(4), Bowl(5), Bowl(3), Cupboard(), f1(2)

两个类初始化完毕,进入main
输出 Creating new Cupboard() in main
接着又初始化一遍Cupboard,这一次静态对象不会被初始化(因为静态对象只会初始化一次),其他与上面所说一样,输出 Bowl(3) Cupboard() f1(2)

紧接着又来一遍输出
Creating new Cupboard() in main
Bowl(3)
Cupboard()
f1(2)

最后调用table,cupboard的f2, f3方法,输出 f2(1) f3(1)

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/328792.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号