刚学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还是在最后 输出吧 如果你认为是位置顺序问题
可以调试一下 看看 结果会有所不同吗?
本文通过一个具体的Java代码示例解释了类的构造器与成员变量初始化的执行顺序,帮助初学者理解Java中对象创建过程的具体步骤。
170万+

被折叠的 条评论
为什么被折叠?



