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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© madianguo 中级黑马   /  2012-11-29 15:45  /  1481 人查看  /  7 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 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);

评分

参与人数 1技术分 +1 收起 理由
奋斗的青春 + 1 赞一个!

查看全部评分

7 个回复

倒序浏览
System.out.println(t.Age = 1);
System.out.println(tt.Age = 2);
弱弱的问问括号中的=符号是干嘛吃的
回复 使用道具 举报
大哥,static修饰的变量为共享变量,就是说所有的对象共享这个变量,而这个变量只占一个单位的内存,你第二次赋值覆盖了第一次的赋值。
回复 使用道具 举报
本帖最后由 胡凤 于 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的值覆盖了-。-

评分

参与人数 1技术分 +1 收起 理由
奋斗的青春 + 1 很给力!

查看全部评分

回复 使用道具 举报
何伟 发表于 2012-11-29 16:15
System.out.println(t.Age = 1);
System.out.println(tt.Age = 2);
弱弱的问问括号中的=符号是干嘛吃的

;P  赋值了呢   
回复 使用道具 举报
胡斌 发表于 2012-11-29 16:33
大哥,static修饰的变量为共享变量,就是说所有的对象共享这个变量,而这个变量只占一个单位的内存,你第二 ...

俺问的下面那个输出咋回事  谢谢了
回复 使用道具 举报
何伟 中级黑马 2012-11-29 17:04:46
7#
madianguo 发表于 2012-11-29 16:59
赋值了呢

你下面那个就是打印赋值后的结果
回复 使用道具 举报
陈山 中级黑马 2012-11-29 18:23:24
8#
构造函数主要用来创建并初始化对象。
例:
class Person{
     String name;

}
Person p=new Person();//在堆区创建一个Person对象,并初始化name为null,然后把Person对象的地址值赋给Person 类型的变量p。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马