日期:2014-05-20 浏览次数:20985 次
程序先从main()函数开始执行,所以要加载Mugs.class,静态初始化在此进行,故先输出Inside main()。
然后是初始化基本类型和引用。
{ c1 = new Mug(1);
c2 = new Mug(2);
System.out.println("c1 & c2 initialized");
}
是一个静态初始化块。
最后执行构造器。
thinking in java 第四章有介绍,可以参考一下。
------解决方案--------------------
这里有点不懂,难道用大括号括来就是静态代码块吗?
------解决方案--------------------
不好意思,之前我的回答有点问题.
1、类只有在使用New调用创建的时候才会被JAVA类装载器装入,不要认为在这句之前内存中已经有了Mugs类了.
启动类(含main方法的类),在命令行中执行命令 :java Mugs 时就加载了.这句话只针对非启动类而言.
------解决方案--------------------
大家研究一下类的初始化顺序,修改后的代码.
class Mug {
Mug(int marker) {
System.out.println("Mug(" + marker + ")");
}
void f(int marker) {
System.out.println("f(" + marker + ")");
}
}
class Mugs {
public static void main(String[] args) {
System.out.println("Inside main()");
Mugs x = new Mugs();
}
Mugs() {
System.out.println("Mugs()");
}
{
c1 = new Mug(3);
c2 = new Mug(4);
c3 = new Mug(5);
System.out.println("c1 & c2 initialized");
}
Mug c1 = new Mug(1);
Mug c2 = new Mug(2);
Mug c3 = new Mug(6);
static{System.out.println("Outside main()");}
static Mug c0=new Mug(0);
}