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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 李飞 中级黑马   /  2012-3-17 00:06  /  1582 人查看  /  5 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

啥也不说直接上代码
Class Person{
     public static int NUM=0;
     public int BB=0;

    Person(){
       Num++;BB++;
   }
}
Class Demo{
   public static void main(String[] args){

Person p1=new Person();
                System.out.println("NUM="+p1.NUM+"...BB="+p1.get());

                Person p2=new Person();
                System.out.println("NUM="+p2.NUM+"...BB="+p2.get());
               
                Person p3=new Person();
                System.out.println("NUM="+p3.NUM+"...BB="+p3.get());
               
  }
}
知道结果吗;
NUM依次是1,2,3
BB依次是1,1,1

当然我们既然变量用的是static修饰,一般都是不能改变其值得,这里只是说明问题

5 个回复

倒序浏览
你没有问问题呀!
回复 使用道具 举报
你的意思是静态的数据不要去改变,否则别的对象在访问的时候就访问不到原先的数据而是改变后的数据了对吧?
回复 使用道具 举报
楼主的意思好像是static修饰符修饰的常量值是不变的?     final 修饰的变量才是不可改变的, static修饰符是在类加载时就加载了变量,而非静态变量是new出新对象后才加载了非静态成员变量的。Class Person{
      public static int NUM=0;//这句话在类加载的时候就运行了。不管创建多少对象,NUM只初始化一次,然后每次调用构造函数的时候NUM就加1然后赋值给本身。
      public int BB=0;//这句话是当创建出对象才运行了这句话,每次调用对象都会执行这语句话所以每个对象的BB值刚开始都是零,然后经过构造函数再加1,所以每次的值都是1.

    Person(){
        Num++;BB++;
    }
}
Class Demo{
    public static void main(String[] args){

Person p1=new Person();
                 System.out.println("NUM="+p1.NUM+"...BB="+p1.get());

                Person p2=new Person();
                 System.out.println("NUM="+p2.NUM+"...BB="+p2.get());
                 
                Person p3=new Person();
                 System.out.println("NUM="+p3.NUM+"...BB="+p3.get());
                 
  }
}

评分

参与人数 1技术分 +1 收起 理由
房宝彬 + 1

查看全部评分

回复 使用道具 举报
冯建鹏 发表于 2012-3-17 10:51
楼主的意思好像是static修饰符修饰的常量值是不变的?     final 修饰的变量才是不可改变的, static修饰符 ...

我的意思是静态变量是放在静态区中,不会随着新对象的产生而产生一个新的静态变量
回复 使用道具 举报
李飞 发表于 2012-3-17 11:35
我的意思是静态变量是放在静态区中,不会随着新对象的产生而产生一个新的静态变量 ...

嗯,自己组织的语言有可能不太好。。。其实我的意思也就是这个意思
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马