class MyPackage{
static MyBook b1 = new MyBook(1);
MyPackage(){
System.out.println("MyPackage()");
b2.foo(1);
}
void foo2(int maker){
System.out.println("foo2("+maker+")");
}
static MyBook b2 = new MyBook(2); // // 2
}
class MyRoom{
MyBook b3 = new MyBook(3);
static MyBook b4 = new MyBook(4);
MyRoom(){
System.out.println("MyRoom()");
b4.foo(2);
}
void foo3(int maker){
System.out.println("foo3("+maker+")");
}
static MyBook b5 = new MyBook(5);
}
public class StaticIni{
public static void main(String[] args){
System.out.println("Creating new MyRoom() in main");
new MyRoom();
System.out.println("Creating new MyRoom() in main");
new MyRoom();
t2.foo2(1); // ///// 1
t3.foo3(1);
}
static MyPackage t2 = new MyPackage();
static MyRoom t3 = new MyRoom();
}作者: 王舜民 时间: 2012-7-22 09:54
好了,到此,进入主函数main()里面了,先执行System.out.println("Creating new MyRoom() in main"); ,打印出
Creating new MyRoom() in main
然后执行new MyRoom();
这个类MyRoom已经加载了,因此只执行实例对象初始化,先显示成元变量MyBook b3,即b3=new MyBook (),那这样就要访问了MyBook
继续,执行System.out.println("Creating new MyRoom() in main"); 打印出Creating new MyRoom() in main
继续执行下面的new MyRoom();
这和上面的一样,得到打印的结果: MyBook(3) MyRoom() foo(2)
最后执行 t2.foo2(1); t3.foo3(1); 这两句
得到打印结果foo2(1)和foo3(1)
作者: 王舜民 时间: 2012-7-22 11:03
feigecal 发表于 2012-7-22 10:20
静态初始化只一次,这一点要注意,下面是顺序
class MyBook
{