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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© HI耀玮 中级黑马   /  2015-11-24 14:16  /  582 人查看  /  4 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

public class Cat{
   private static int sid=0;
   private String name;
    int id;
   Cat(String name){
     this.name=name;
       id=sid++;
  }
    public void info(){
       System.out.println( "猫的名字:"+name+"编号:"+id);
   }


    public static void main(String[]args){
       Cat.sid=1;
        Cat mimi=new Cat("mimi");
           mimi.sid=2000;
        Cat pipi=new Cat("pipi");
         Cat nini=new Cat("nini");
         mimi.info();
          pipi.info();
           nini.info();
    }

}

为什么这段代码输出mimi的值是1呢?我已经将sid的值改为2000啊?为何在pipi开始变为2000的?求解

4 个回复

倒序浏览
System.out.println( "猫的名字:"+name+"编号:"+id);你输出的是id的值,不是sid的值
回复 使用道具 举报
把这段代码拿出来分析一下:
  1. public static void main(String[]args){
  2.                 sid=1;//sid是静态的,对他的任何改变在本例中都有效,这里第一次赋值为1
  3.                 Cat mimi=new Cat("mimi");//当Cat实例化,调用构造方法是:id=sid++;--先赋值给id为1然后sid自加为2
  4.                 mimi.sid=2000;//静态的sid重新赋值为2000
  5.                 Cat pipi=new Cat("pipi");//同上,pipi的为2000,sid=2001
  6.                 Cat nini=new Cat("nini");//没有作任何改变,nini的id=2001  sid=2002;
  7.                 mimi.info();//id=1
  8.                 pipi.info();//id=2000
  9.                 nini.info();//id=2001
  10.             }
复制代码
回复 使用道具 举报
静态成员变量先于构造函数存在,也是说在你实例化mimi之前 sid=0,id=sid++,id是1,执行Cat mimi=new Cat("mimi");mimi.sid=2000;后,sid为2000,id还是1.你输出System.out.println( "猫的名字:"+name+"编号:"+id);就是你现在这个结果了。
回复 使用道具 举报
看一下
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马