已有101人关注
局部变量和成员变量输出问题
发表在Java图书答疑 2015-07-16
是否精华
版块置顶:
public class CopyOfTransferProperty {
static int i=47; //定义静态成员变量
public void call(){ //定义成员方法
System.out.println("调用call()方法");
for(i=0;i<3;i++){
System.out.print(i+" ");
if(i==2){
System.out.println("\n");
}
}
}
public CopyOfTransferProperty(){ //定义构造方法
}
public static void main(String[] args) { //定义主方法
CopyOfTransferProperty t1=new CopyOfTransferProperty(); //创建一个对象
CopyOfTransferProperty t2=new CopyOfTransferProperty(); //创建另一个对象
t2.i=60; //将类成员变量赋值为60
//使用第一个对象调用类成员变量
System.out.println("第一个实例对象调用变量i的结果:"+t1.i++); 
t1.call(); //使用第一个对象调用类成员方法
//使用第二个对象调用类成员变量
System.out.println("第二个实例对象调用变量i的结果:"+t2.i);
t2.call(); //使用第二个对象调用类成员方法
}
}

System.out.println("第二个实例对象调用变量i的结果:"+t2.i);的输出怎么是3.有人说是c调用了t1call()
确实是的,但是call里面的i不是局部变量么,而t2.i不是成员变量么?有点不懂。望求指点一下
分享到:
精彩评论 1
菜鸟级精英
学分:0 LV1
TA的每日心情
开心
2020-03-23 21:05:48
2015-07-17
沙发
i是static修饰的,所有对象都共享这个静态变量。如果是t2修改了这个值,那么t1的值也会发生改变。
第一次输出的值是60,因为程序首先执行“t2.i=60; ”;
第二次输出的值是0 1 2,因为程序执行了“for(i=0;i<3;i++)”循环中的i=0这个赋值语句;
输出完 0 1 2之后,由于执行了“for(i=0;i<3;i++)”中的i++语句,此时i的值就是3;
所以第三次输出的就是3;
第四次由重新调用call方法,i的值又从0开始了。
首页上一页 1 下一页尾页 1 条记录 1/1页
手机同步功能介绍
友情提示:以下图书配套资源能够实现手机同步功能
明日微信公众号
明日之星 明日之星编程特训营
客服热线(每日9:00-17:00)
400 675 1066
mingrisoft@mingrisoft.com
吉林省明日科技有限公司Copyright ©2007-2022,mingrisoft.com, All Rights Reserved长春市北湖科技开发区盛北大街3333号长春北湖科技园项目一期A10号楼四、五层
吉ICP备10002740号-2吉公网安备22010202000132经营性网站备案信息 营业执照