静态数据初始化顺序

今天看Thinking in java的时候看到了一个很好的例子,分享一下

注意要点 无论创建多少个对象,静态数据只占用1份存储区域。

package com.java.staticTest;

public class StaticInitialization {
	public static void main( String[] args ) {
		System.out.println( "Creating a new cupboard in main" );
		new Cupboard();
		System.out.println("Creating a new cupboard in main");
		new Cupboard();
		table.f2(1);
		cupboard.f3(1);
	}
	static Table table = new Table();
	static Cupboard cupboard = new Cupboard();
}
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);
	Cupboard() {
		System.out.println("Cupboard()");
		bowl4.f1(2);
	}
	void f3( int marker ) {
		System.out.println("f3(" + marker + ")");
	}
	static Bowl bowl5 = new Bowl(5);
}
贴一下输出
Bowl(1)
Bowl(2)
Table()
f1(1)
Bowl(4)
Bowl(5)
Bowl(3)
Cupboard()
f1(2)
Creating a new cupboard in main
Bowl(3)
Cupboard()
f1(2)
Creating a new cupboard in main
Bowl(3)
Cupboard()
f1(2)
f2(1)
f3(1)

你可能感兴趣的:(静态数据初始化顺序)