超级高超,超级郁闷,超级难的超级JAVA问题

iamlovelx 2004-06-30 09:44:00
public class Test {
static Test test = new Test();
public Test(){
System.out.println("haha");
}
public static void main(String[] args){
Test test = new Test();

}
}
输出的居然是haha
haha
public class Test {
Test test = new Test();
public Test(){
System.out.println("haha");
}
public static void main(String[] args){
Test test = new Test();

}
}
不能运行
public class Test {
static Test test = new Test();
public Test(){
System.out.println("haha");
}
}
输出一个haha后,出现错误提示。

超级郁闷啊,请大家分析以下JAVA的运行机制,为什么会出现上面哪些情况的啊,谢谢大家啊
...全文
169 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
diaopeng 2004-06-30
  • 打赏
  • 举报
回复
其实很简单,看看java的运行机制就知道了,类成员变量的初始化在构造函数调用前完成,所以static Test test = new Test()先执行,结果输出"haha",然后就是一般的对象初始化过程,所以显示两次是正常的。对象成员变量的初始化是在调用构造函数之后。
只要理解了这样的过程,那么对上面的问题就迎刃而解了
blasterboy 2004-06-30
  • 打赏
  • 举报
回复
同意 eric22cn(eric22cn)
eclipse0016 2004-06-30
  • 打赏
  • 举报
回复
我倒,你的标题太夸张了吧?!
arkang168 2004-06-30
  • 打赏
  • 举报
回复
同意 eric22cn(eric22cn)
eric22cn 2004-06-30
  • 打赏
  • 举报
回复
第一段程序,因为static test在初始化时编译,调用test()方法,输出一次"haha",main()方法又调用,所以输出两次。
第二段程序,因为main()方法调用时,test不是static 未被初始化就被调用,所以出错。
第三段程序,没有main()方法,出错。
liuliliujian 2004-06-30
  • 打赏
  • 举报
回复
第一个应该是在main方法中实例Test类时,调用构造函数时会对它的成员变量test初始化,所以有一行haha,然后构造函数的内部又打出一行haha,如果你在main方法中再实例一次Test
类的话就只能显示3行了,应该成员变量test是static型的,只会被初始化一次
anyang_1978 2004-06-30
  • 打赏
  • 举报
回复
public class Test {
static Test test = new Test();
public Test(){
System.out.println("haha");
}
public static void main(String[] args){
Test test = new Test();

}
}
输出的居然是haha
haha
/////因为你进行了递归调用所以出现了两次提示
public class Test {
Test test = new Test();
public Test(){
System.out.println("haha");
}
public static void main(String[] args){
Test test = new Test();

}
}
//我觉得是因为类的重复定义

62,623

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧