各位,帮我详细分析一下这道java程序

来源:百度知道 编辑:UC知道 时间:2024/05/03 23:50:11
各位,帮我详细分析一下下面这道程序.
class Tag{
Tag(int marker){
System.out.println("Tag("+marker+")");
}
}
class Card
{
Tag t1=new Tag(1);
Card()
{
System.out.println("Card()");
t3=new Tag(33);
}
Tag t2=new Tag(2);
void f(){
System.out.println("f()");
}
Tag t3=new Tag(3);
}
public class maomao{
public static void main(String[] args){
Card t=new Card();
t.f();
}
}

编译后的答案是这样的:Tag(1)
Tag(2)
Tag(3)
Card()
Tag(33)
f()
如果按我的理解,我的答案是应该输出f()先.我就想不明白.希望那位高手能帮我详细分析下这道程序(就好像,从程序的那里那里开始,然后经历那里,最后就输出什么.也就是说能详细说下这道程序的流程.)
谢各位啦!

这个程序的运行过程是这样的:

第一,先找主方法。
主方法的第一句是“ Card t=new Card(); ”,然后程序就会跳到 Card 类。

第二,观察一下 Card 类我们可以知道,它有三个成员变量和一个构造方法以及一个 f 方法。
当程序对 Card 进行初始化时,它会先对类的三个成员变量进行初始化,也就是 t1,t2,t3 ,这就是为什么程序先打印的是 Tag(1) 、Tag(2)、Tag(3) 的原因。

之后程序就转到 Card 类的构造方法,经过这一步之后程序就打印出了 Card() ,然后又实例化了一个 Tag ,它打印的是 Tag(33) .

最后程序又回到主方法中。这个时候就是主方法中的第二条语句 t.f(); 了。

怎么样,这样够清楚了吧?

哈为什么老有人爱研究这种问题