刚学Java学到类不久的朋友,可能会在这定义语句与构造器的执行顺序问题上不能理解。往往是心里想的结果与执行结果有所出处。看下面这段代码:
看完这代码后 你心里已有输出结果了吧 是不是与下面的调试出来的结果有所不同:
class Mug
{
Mug(int marker)
{
System.out.println("Mug(" + marker + ")");
}
}
public class Mugs
{
Mugs()
{
System.out.println("Mugs()");
}
Mug c1;
Mug c2;
{
c1 = new Mug(1);
c2 = new Mug(2);
System.out.println("c1 & c2 initialized");
}
public static void main(String [] args){
System.out.println("Inside main()");
Mugs x=new Mugs();
}
}
Inside main()
Mugs()
Mug(" 1 ")
Mug(" 2 ")
c1 & c2 initialized
关于这点 其实原因在于:程序中 先执行定义语句 然后在执行方法语句 无论是构造器也好 一定先执行的是定义语句
如果你认为这样不对 是代码块的原因
那我们也可以 另定一个代码块 里面放一个简单的输出语句 试试看:
我们把它加在Mugs构造器的下面
{
System.out.println("11111111111111111111111111");
}
这下调试的结果为:
Inside main()
Mugs()
Mug(" 1 ")
Mug(" 2 ")
c1 & c2 initialized
11111111111111111111111111
这回 代码块 中的全1还是在最后 输出吧 如果你认为是位置顺序问题
可以调试一下 看看 结果会有所不同吗?