静态数据
打印结果
当StaticInitialization执行的时候,首先会加载
static Table table = new Table();
static Cupboard cupboard = new Cupboard();
当执行new Table()的时候,他就会执行static Bowl bowl1 = new Bowl(1);
就会调用BOwl的构造方法,
Bowl(int marker){
System.out.println("BOwl"+marker);
},打印出BOwl1
然后继续调用static Bowl bowl2 = new Bowl(2);
打印出BOwl2,执行完Table类里面的静态方法后,由于是new Table,所以他就会执行Table类的构造方法,打印出Table和f11
以上这些是执行StaticInitialization里面的静态数据
static Table table = new Table();
接下来会执行static Cupboard cupboard = new Cupboard();
就会调用static Bowl bowl4 = new Bowl(4);
打印出BOwl4
在执行static Bowl bowl5 = new Bowl(5);
打印出BOwl5
然后在调用非静态数据,Bowl bowl3 = new Bowl(3);
打印出BOwl3
其次才执行Cupboard类的构造方法
打印出Cupboard,fl2
当初始化完StaticInitialization的静态数据后,才会执行他的main方法
打印出Createing new Cupbord() in main
Mian方法里面有new Cupboard();
由于Cupboard里面的静态数据已经加载过了,已经放进了静态数据的内存区域,重新new Cupboard的时候将不会再次加载,但由于Bowl bowl3 = new Bowl(3);是非静态数据,将会再次被加载,所以打印出BOwl3,在往下执行,调用Cupboard的构造方法,打印出Cupboard 和f12
然后再执行StaticInitialization的System.out.println("Createing new Cupbord() in main");
new Cupboard();这两行代码,
依次打印出Createing new Cupbord() in main
BOwl3
Cupboard
f12
静态数据与非静态数据
打印结果
由于ExplicitStatic没有静态数据和常量,那就直接执行Main方法
打印出Inside main()
接下来执行Cups.cup1.f(99);
将会加载Cups里面的
就会打印出CUp1 Cup2
由于不是实例化(new),所以就没有执行构造方法,打印出f99
---------------------------------------------------------------------------------------------------------------------------------
非静态数据
打印结果
由于Mugs类里面没有静态数据,所以将会直接执行Main方法
打印出Inside,执行new Mugs();接下来将会执行常量,
Mug mug1;
Mug mug2;
{
mug1 = new Mug(1);
mug2 = new Mug(2);
System.out.println("mug1 & mug2");
}
打印出Mug1 Mug2 mug1 & mug2
然后再执行构造方法,打印出Mugs(),再执行System.out.println("new Mugs()");
再执行new Mugs(1);再次依照new Mugs();一样,执行下去