黑马程序员技术交流社区

标题: 书山的代码,书上运行有结果,我自己运行有误。菜鸟求解 [打印本页]

作者: 路西法    时间: 2014-1-5 21:35
标题: 书山的代码,书上运行有结果,我自己运行有误。菜鸟求解
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());
        }
}
作者: 路西法    时间: 2014-1-5 21:46
书上的运行结果是:
作者: 路西法    时间: 2014-1-5 21:51
提问补充:书上的运行结果是:After changeModel:金牌=100 银牌=0 铜牌=100   为什么银牌是0?  还有程序运行时说无法从静态上下文引用非静态
作者: 小小菜鸟    时间: 2014-1-5 22:03
  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
自己对照一下就知道了:
作者: 范二青年    时间: 2014-1-5 22:09
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>
复制代码


作者: 路西法    时间: 2014-1-5 22:23
范二青年 发表于 2014-1-5 22:09
changeModel 这个方法是是属于Olympics2这个类的对象的,想要调用只能new 一个对象之后调用,就是换成n2.ch ...

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


作者: 路西法    时间: 2014-1-5 22:25
小小菜鸟 发表于 2014-1-5 22:03
运行结果:
In changeModel:金牌=100 银牌=100 铜牌=50
After changeModel:金牌=100 银牌=0 铜牌=100

书上少了个o2  不靠谱   当然还是我的技术不行啊    谢谢
作者: 范二青年    时间: 2014-1-5 22:26
路西法 发表于 2014-1-5 22:23
首先先谢过大虾了,   这么了解我不了解的东西。正中我心啊

我也是新手~  呵呵    准备报29期,到时候见哈
作者: 路西法    时间: 2014-1-5 22:54
范二青年 发表于 2014-1-5 22:26
我也是新手~  呵呵    准备报29期,到时候见哈

我也准备29期,可是我十二月才接触到黑马。感觉时间不够啊 ,反正拼了,呵呵 希望明年能聚到一起。
作者: 曹春洋    时间: 2014-1-6 10:01
俺也是新手,正努力进行时呢,希望我们能成为同学呵呵!黑马见




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2