JAVA问题:看下面的代码:结果是什么??到底为什么是这样的结果???

publicclassStaticFieldTest{publicstaticvoidmain(String[]args){Foo1f1=newFoo1();Foo1f2... public class StaticFieldTest {
public static void main(String[] args) {
Foo1 f1 = new Foo1();
Foo1 f2 = new Foo1();
System.out.println(f1.id + "," + f2.id + "," + Foo1.index);
}
}
class Foo1 {
static int index = 1;
int id;
public Foo1() {
this.id = index++;
}
}
展开
 我来答
xjf0627
2012-03-17
知道答主
回答量:50
采纳率:0%
帮助的人:34.8万
展开全部

结果 就是这个 f1.id = 1 ,f2.id =1,foo1.index = 3 。

第一个语句开始执行前,java把相关类全部加载如堆中,Static int index 静态变量,只加载一次。 

然后new新对象,地址值传递给f1和f2.。id属性在初始化的时候值为0. 另外在new的时候调用默认构造器 index++操作的是唯一的那个static。。

追问
你的答案怎么与他们不同呢?
追答
确实是。。f1.id=1 f2.id=2 index=3,我疏忽了。。在Foo1 f2 = new Foo1();的时候index已经被修改成2 了。
独行的苏泽
2012-03-17 · TA获得超过161个赞
知道小有建树答主
回答量:203
采纳率:0%
帮助的人:186万
展开全部
f1.id = 1; f2.id= 1; Foo1.index = 3;
构造函数在类实例化的时候会调用一次,另外整形变量 没有赋值的情况下,系统默认会赋值为0。在类实例化一次的时候,id由index自加了1 所以,f1,f2的id都是1。
index为三是因为前两次实例化时,index是全局静态变量。它会一直存在并因为类的实例化而增长。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
say1add1eq2
2012-03-17 · 超过33用户采纳过TA的回答
知道答主
回答量:111
采纳率:0%
帮助的人:78万
展开全部
结果是:1,2,3
static 的 index一旦分配内存,其地址就不变了
每 new Foo1()一次 先是id=index,再是index=index+1
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友e1c08baef
2012-03-17 · TA获得超过418个赞
知道小有建树答主
回答量:551
采纳率:0%
帮助的人:434万
展开全部
1,2,3啊。这么简单你好好看看就明白了
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
财富密码_程西
2012-03-17 · TA获得超过384个赞
知道小有建树答主
回答量:319
采纳率:0%
帮助的人:160万
展开全部
建议楼主好好看看子类与父类的继承方法逻辑
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(3)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式