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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

public class Olympics2
{
        private int gold = 0;
        private int silver = 0;
        private int copper = 0;
        public  void changeModel(int a,int b,int c)
        {
                gold = a;
                int silver = b;
                int copper = 50;
                System.out.println("In changeModel:"+"金牌="+gold+"银牌="+silver+"铜牌="+copper);
                this.copper=c;
        }
        String getModel()
        {
        return"金牌="+gold+"银牌="+silver+"铜牌="+copper;
        }
        public static void main(String[] args)
        {
                Olympics2 o2 = new Olympics2();
                System.out.println("Before changeModel:"+o2.getModel());
                changeModel(100,100,100);
                System.out.println("After changeModel:"+o2.getModel());
        }
}

评分

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

查看全部评分

9 个回复

倒序浏览
书上的运行结果是:
回复 使用道具 举报
提问补充:书上的运行结果是:After changeModel:金牌=100 银牌=0 铜牌=100   为什么银牌是0?  还有程序运行时说无法从静态上下文引用非静态
回复 使用道具 举报
  1. public class Olympics2 {

  2.           private int gold=0;

  3.           private int silver=0;

  4.           private int copper=0;

  5.           public void changeModel(int a,int b,int c) {

  6.             gold=a;            

  7.             int silver=b;         // silver使同名类成员变量隐藏

  8.             int copper=50;       // copper使同名类成员变量隐藏

  9.             System.out.println("In changeModel:"+"金牌="+gold+" 银牌="+silver+" 铜牌="+copper);

  10.             this.copper=c;      // 给类成员变量copper赋值

  11.           }

  12.           String getModel() {

  13.             return "金牌="+gold+" 银牌="+silver+" 铜牌="+copper;

  14.           }

  15.           public static void main(String args[]) {

  16.             Olympics2 o2=new Olympics2();

  17.             System.out.println("Before changeModel:"+o2.getModel());

  18.             o2.changeModel(100,100,100);

  19.             System.out.println("After changeModel:"+o2.getModel());

  20.           }

  21. }
复制代码

运行结果:
In changeModel:金牌=100 银牌=100 铜牌=50
After changeModel:金牌=100 银牌=0 铜牌=100
自己对照一下就知道了:

评分

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

查看全部评分

回复 使用道具 举报
changeModel 这个方法是是属于Olympics2这个类的对象的,想要调用只能new 一个对象之后调用,就是换成n2.changeModel (),如果想直接使用 只能定义成static方法  public static changeModel (。。。)这样使用


至于为什么银牌是0 你要看一看changeModel 方法中式怎样赋值的
下面是完整代码 ,我给你写点注释,看看你能明白不  不明白在问我哈

  1. <P>public class Olympics2 {

  2. private int gold = 0;
  3. private int silver = 0;  // 类的属性 此属性属于类对象
  4. private int copper = 0;
  5. public void changeModel(int a,int b,int c)
  6. {
  7. gold = a;
  8. int silver = b;// 看此处  重新int了一个silver  和上面的那个不是一个  只是名称相同 只在这个方法内有效  所以此方法执行后</P>
  9. <P>                     // 上面定义的silver属性的值并没有改变   所以在getModel方法中打印的是类的属性  不是此方法中的这个b赋值到的silver</P>
  10. <P>                     // 所以银牌一直是0
  11. int copper = 50;
  12. System.out.println("In changeModel:"+"金牌="+gold+"银牌="+silver+"铜牌="+copper);
  13. this.copper=c;
  14. }
  15. String getModel()
  16. {
  17. return"金牌="+gold+"银牌="+silver+"铜牌="+copper;
  18. }
  19. public static void main(String[] args)
  20. {
  21. Olympics2 o2 = new Olympics2();
  22. System.out.println("Before changeModel:"+o2.getModel());
  23. o2.changeModel(100,100,100);
  24. System.out.println("After changeModel:"+o2.getModel());
  25. }

  26. }</P>
复制代码

  1. <P> </P>
复制代码

评分

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

查看全部评分

回复 使用道具 举报
范二青年 发表于 2014-1-5 22:09
changeModel 这个方法是是属于Olympics2这个类的对象的,想要调用只能new 一个对象之后调用,就是换成n2.ch ...

首先先谢过大虾了,   这么了解我不了解的东西。正中我心啊

回复 使用道具 举报
小小菜鸟 发表于 2014-1-5 22:03
运行结果:
In changeModel:金牌=100 银牌=100 铜牌=50
After changeModel:金牌=100 银牌=0 铜牌=100

书上少了个o2  不靠谱   当然还是我的技术不行啊    谢谢
回复 使用道具 举报
路西法 发表于 2014-1-5 22:23
首先先谢过大虾了,   这么了解我不了解的东西。正中我心啊

我也是新手~  呵呵    准备报29期,到时候见哈
回复 使用道具 举报
范二青年 发表于 2014-1-5 22:26
我也是新手~  呵呵    准备报29期,到时候见哈

我也准备29期,可是我十二月才接触到黑马。感觉时间不够啊 ,反正拼了,呵呵 希望明年能聚到一起。
回复 使用道具 举报
俺也是新手,正努力进行时呢,希望我们能成为同学呵呵!黑马见
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马