黑马程序员技术交流社区

标题: static 问题 [打印本页]

作者: madianguo    时间: 2012-11-29 15:45
标题: static 问题
本帖最后由 madianguo 于 2012-11-29 17:00 编辑

CSDN转的  不明白

我们都知道 无论一个类生成了多少个对象  所有这些对象共同使用唯一一份static的成员变量 一个对象对该静态成员变量进行了修改 其他对象的该静态成员变量的值也会发生变化

比如

static int Age;

Test t = new Test();      Test tt = new Test();

t.Age = 1;   tt.Age = 2;

System.out.println(t.Age );
System.out.println(tt.Age);
打印的值都是2

但是 这样写打印的值是不一样的 这是为什么?
System.out.println(t.Age = 1);
System.out.println(tt.Age = 2);

作者: 何伟    时间: 2012-11-29 16:15
System.out.println(t.Age = 1);
System.out.println(tt.Age = 2);
弱弱的问问括号中的=符号是干嘛吃的

作者: 胡斌    时间: 2012-11-29 16:33
大哥,static修饰的变量为共享变量,就是说所有的对象共享这个变量,而这个变量只占一个单位的内存,你第二次赋值覆盖了第一次的赋值。
作者: 胡凤    时间: 2012-11-29 16:41
本帖最后由 胡凤 于 2012-11-29 16:50 编辑

package free;

public class Test {
        public int num;
        static int Age=0;
        Test(){
                num=++Age;
        }
        public static void main(String[] args) {
                // TODO Auto-generated method stub
                Test t = new Test();      Test tt = new Test();
                System.out.println(t.num );
                System.out.println(tt.num);
        }

}
这样就好了,ststic修饰的Age是一个静态域,在每次实例化一个对象时,对象都被赋予Age的当前值,而且Age的值是逐一递增的。
你在实例化两个对象后Age的值已经为2,但是后面两句将Age的值覆盖了-。-
作者: madianguo    时间: 2012-11-29 16:59
何伟 发表于 2012-11-29 16:15
System.out.println(t.Age = 1);
System.out.println(tt.Age = 2);
弱弱的问问括号中的=符号是干嘛吃的

;P  赋值了呢   
作者: madianguo    时间: 2012-11-29 17:00
胡斌 发表于 2012-11-29 16:33
大哥,static修饰的变量为共享变量,就是说所有的对象共享这个变量,而这个变量只占一个单位的内存,你第二 ...

俺问的下面那个输出咋回事  谢谢了
作者: 何伟    时间: 2012-11-29 17:04
madianguo 发表于 2012-11-29 16:59
赋值了呢

你下面那个就是打印赋值后的结果
作者: 陈山    时间: 2012-11-29 18:23
构造函数主要用来创建并初始化对象。
例:
class Person{
     String name;

}
Person p=new Person();//在堆区创建一个Person对象,并初始化name为null,然后把Person对象的地址值赋给Person 类型的变量p。





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