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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 罗亚东 黑马帝   /  2011-10-9 19:42  /  2726 人查看  /  6 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

因为static类型的数据是属于类所有的。使用同一个类创建多个对象时对象虽然产生了多个,但类却只加载了一次,那个static的数据count也就随着类的加载而只“加载”一次,每创建一个对象都要调用一次构造方法,构造方法中正好又使用了static的count,此时count达到了共享,这样count就不断的++了。如果去掉了count前面的static的话,这时count就属于对象所有了,就是count只有在对象产生后才有,而每个对象只产生自己中的count,count这时没有被共享,简单说就是各个对象只有各自的count,他们互不相干,所以你去掉了count前的static就出现了你所说的总是0的情况。

评分

参与人数 1技术分 +1 黑马币 +1 收起 理由
admin + 1 + 1

查看全部评分

回复 使用道具 举报
class Chinese
{
        private static int count=0;
        private static String country="中国";
        String name;
        int age;
        public Chinese()
        {
        System.out.println(++count);
        }
}
class TestChinese
{
        public static void main(String[] args)
        {
                new Chinese();
                new Chinese();
                new Chinese();
        }
}
程序打印出是1 2 3,但如果count不是static的,为什么打印的都是1呢?视频上听的不太懂?

6 个回复

倒序浏览
那是因为static修饰的变量是类变量,所以每个new一次count加上1.
如果不是static变量,每new一个对象count的值都会为0,他们是成员变量,不是类变量,所以当++count
执行时打印1.

评分

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

查看全部评分

回复 使用道具 举报
静态数据只有一份,存储在方法区
被所有对象共享
创建第一个对象时 创建一个count       这时count 是1
创建第二个对象时  并没有重新创建count变量,用的就是创建好的那个count ,因为所有对象共享静态变量,  这时count已经是1了 ,再操作就是在这个基础上操作
依次类推,第三个对象,第四个对象....
如果count不是静态的,存储在堆中,那么每次创建一个对象,就生成一个新的count变量,所以每次创建新对象,count都是0

评分

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

查看全部评分

回复 使用道具 举报
count如果没被static修饰,那每次创建对象时,都是从0开始,并没有累加,被static修饰后会存储在静态区

评分

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

查看全部评分

回复 使用道具 举报
我觉得把!还是你面向对象的概念没弄透彻!并不是这个static的静态的问题!
      这里把这个count声明为静态的!那么他就是一个常量了!你用new关键字创建的是这个类的每个实例,都会共享这个成员,如果这个成员变量不是static的那么在用new关键字创建实例的时候,每个人都会有自己的一个count成员!
       举一个例子,假如有一个类是Person类,每个人都有自己的age属性,和name属性!不能许多人共享一个名字,一个年龄!所以他们两就不是静态的! 人类有个人口总数,那么这时候这个属性就要生命为静态的了!
      自己再给总结一下把,不知道正不正确,可以参考:静态的就是这个类所拥有的属性,非静态的一定是这个实例对象的属性!
   
       静态的可以直接用类名,点成员变量来访问!而非静态的必须用实例对象来调用,这是个小特性,如果你了解了面向对象,这个问题是原理不难理解的!

      在补充一句!面向对象的设计思想!就是为了让程序编写更贴近显示生活!
       哥们,这个问题弄明白了!这不弄明白了,后面可就麻烦了.....!

评分

参与人数 1技术分 +1 黑马币 +1 收起 理由
admin + 1 + 1

查看全部评分

回复 使用道具 举报
张洋铭 黑马帝 2011-10-10 18:17:47
7#
这个问题给你举个例子说明

1. 黑马论坛,是大家一起用的吧,谁来访问都这么一个论坛。像这样大家共用的就是static的

2. 假设有3个人在论坛上发帖子,A发完,帖子数变成1,B发完变成2,C发完变成3。这个能理解吧

3. 现在黑马论坛不用static修饰了,那就相当于是个体独有的,一人一个黑马论坛。
A来访问,就是A黑马论坛,A在论坛里发个帖,帖子数为1。
B来访问,就是B黑马论坛,B在论坛里发个帖,帖子数为1。
C来访问,就是C黑马论坛,C在论坛里发个帖,帖子数为1。

4.估计你看完,对static的理解就哦了!
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马