A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 彭彪 中级黑马   /  2013-9-11 12:16  /  2037 人查看  /  8 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

  1. package com.study;

  2. public class AccessProperty {
  3.         static int i = 47;                //定义静态成员变量
  4.         public void call(){                //定义成员方法
  5.         System.out.println("调用call()方法");
  6.         for(i=0;i<3;i++){
  7.                 System.out.println(i+" ");
  8.                 if(i==2){
  9.                         System.out.println("\n");
  10.                         }
  11.                 }
  12.         }
  13.         public AccessProperty(){        //定义构造方法
  14.         }
  15.         public static void main(String[] args){
  16.                 AccessProperty t1 = new AccessProperty();
  17.                 AccessProperty t2 = new AccessProperty();
  18.                 t2.i=60;                //将类成员变量赋值为60
  19.                 System.out.println("第一个实例对象调用变量i的结果:"+t1.i++);
  20.                 t1.call();
  21.                 System.out.println("第二个实例对象调用变量i的结果:"+t2.i);
  22.                 t2.call();
  23.         }
  24. }
复制代码
   为什么?    第二个实例对象调用变量i的结果   3             ?????
    t1.i++    中的i 是类成员变量i还是哪个?   执行完后什么结果?  为什么   t1.i++   执行完后i值变为3了?
    t2.i

搜狗截图20130911120455.png (63.36 KB, 下载次数: 46)

搜狗截图20130911120455.png

评分

参与人数 1技术分 +1 收起 理由
EYE_SEE_YOU + 1

查看全部评分

8 个回复

倒序浏览
你需要加深类内存的理解,一个对象无论有多少个实例,都会共享同一份类成员变量,就是说只要用static修饰的成员变量,就属于类,代码中: t1.call();经过方法的循环,经过循环,已经给i重新赋值了,并且经过循环已经把 i 的值变成3了,所以打印的是3.

评分

参与人数 1技术分 +1 收起 理由
EYE_SEE_YOU + 1

查看全部评分

回复 使用道具 举报
t1.i++    中的i 是类成员变量i还是哪个?
答:必然是成员变量i。所谓t1.i即是调用t1所属类的成员变量i。。t1是AccessProperty类,自然调用的是上面04行的静态成员变量了。。

执行完结果应该是:
第一个实例对象调用变量i的结果:60   //20行结果:静态变量值是通用的。19行i被赋值为了60
调用call()方法                            //21行结果:i(此时i==61因为t1.i++,即60++)在for循环中被赋值为1,并参与循环。。
0
1
2
                                    //21行结果:当i==3时不满足i<3即循环结束

第二个实例对象调用变量i的结果:3    //22行结果 i自然是等于3了。。
调用call()方法                            //23行结果:i(此时i==3)在for循环中被赋值为1,并参与循环
0
1
2



我不太明白你问的啥意思。。我整体给你分析了一下。。。

评分

参与人数 1技术分 +1 收起 理由
EYE_SEE_YOU + 1

查看全部评分

回复 使用道具 举报
周文斌 发表于 2013-9-11 12:39
t1.i++    中的i 是类成员变量i还是哪个?
答:必然是成员变量i。所谓t1.i即是调用t1所属类的成员变量i。 ...

循环结束后,还会执行一次 i++ ;  当i=2的时候,还是满足循环条件。执行到 i=2 之后,i就变成了3,然后跳出循环条件。所以结果应该是3
回复 使用道具 举报
本帖最后由 张晓辉 于 2013-9-11 13:03 编辑

{:soso_e100:}
回复 使用道具 举报
周文斌 发表于 2013-9-11 12:39
t1.i++    中的i 是类成员变量i还是哪个?
答:必然是成员变量i。所谓t1.i即是调用t1所属类的成员变量i。 ...

正解。。。
回复 使用道具 举报
熊亮 中级黑马 2013-9-12 20:19:48
7#
始终是一个成员变量i,在不停地被赋值罢了
回复 使用道具 举报
因为for里面是i=3而不是int i=3,所以i一直是成员的那个。
回复 使用道具 举报
关键for(i=0;i<3;i++)就是这句, 这个i还是成员变量i,要是变成for(int i=0;i<3;i++)的话,t1.i++   执行完后i值会变成61 也就是你原来想的那个值
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马