java之中的变态问题......

happyfucheng 2007-08-15 05:39:15
1、

public class Test2 extends Test1
{
{
System.out.print("1");
}

Test2()
{
System.out.print("2");
}

static
{
System.out.print("3");
}

{
System.out.print("4");

}

public static void main(String[] args)
{
new Test2();

}

}

class Test1
{

Test1()
{
System.out.print("5");
}

static
{
System.out.print("6");
}
}



2、

public class Test3 extends Test4
{
int i=30;

Test3()
{
print();
i=40;
}

public static void main(String[] args)
{
System.out.println(new Test3().i);
}

void print()
{
System.out.println(i);
}

}

class Test4
{
int i=10;

Test4()
{
print();
i=20;
}

void print()
{

System.out.println(i);
}
}



这两个题目非常变态,大家看看会输出什么.知道的,谁能给我解释下具体的原因,感激不尽..............



...全文
240 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
sunnylovewindy 2007-08-15
  • 打赏
  • 举报
回复
二楼高手!拜服
zdjray 2007-08-15
  • 打赏
  • 举报
回复
没事,下次多放点分上来自然关注的人就多了
happyfucheng 2007-08-15
  • 打赏
  • 举报
回复
标题主要是要吸引人嘛,呵呵.....怎么把分给你啊...俺是新手,没多的分给啊...
zdjray 2007-08-15
  • 打赏
  • 举报
回复
这种标题很容易让人得心脏病~
happyfucheng 2007-08-15
  • 打赏
  • 举报
回复
感谢,zdjray(PubSoft) ,
应该是这样,我明白了.....
chq235 2007-08-15
  • 打赏
  • 举报
回复
??????
zdjray 2007-08-15
  • 打赏
  • 举报
回复
1.优先顺序
static匿名方法>匿名方法>构造函数

2.
变量初始化>构造函数
但是初始化流程如下Test3()入口->Test4()入口->Test4的变量->Test4()执行
->Test3变量->Test3()执行

然而很巧的是你在Test3和Test4中用了同一个名字的方法,造成了override
所以调用的是Test3的print()方法
此时Test3.i还没有被初始化,所以是0
joohnnie 2007-08-15
  • 打赏
  • 举报
回复
看看《think in java 3》 里面里关于类的装载问题
里面有关于static变量,实例变量,构造函数的调用相关问题
是比较复杂

62,614

社区成员

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

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