黑马程序员技术交流社区

标题: 求解关于static的问题! [打印本页]

作者: 林豪    时间: 2012-4-16 22:09
标题: 求解关于static的问题!
class Fu
{
        static int age=5;
}
class Zi extends Fu
{
        static int age=10;
       
}
class Diao
{
        public static void main(String[] args)
        {
                int age=25;
                Fu f=new Fu();
                Zi z=new Zi();
                System.out.println(age);
                System.out.println(f.age);
                System.out.println(z.age);
               
        }
}
为什么打印出来的结果是 25,5,10   
static不是在内存中开辟了一块空间吗?那么变量名一样为什么还能同时存在且不同?
作者: chenwei    时间: 2012-4-16 22:14
个人认为,是一个类的每个对象共用 ,不是所有类都共用
作者: 程旦    时间: 2012-4-16 22:14
static修饰的属性是属于类的 此题中的age分别属于Fu和Zi类 所以是两个变量  int age=25是个局部变量  楼主懂了吧
作者: 陈坚    时间: 2012-4-16 23:04
static修饰的静态变量是属于类,不属于某个特定的对象,而楼主定义的age静态变量分别属于Fu和Zi,他们是两个不同的变量,在内存中分配不同的地址,所以他们的结果不会相同
作者: 王永旺    时间: 2012-4-16 23:15
本帖最后由 王永旺 于 2012-4-16 23:17 编辑

是每一个类的统一变量都用一个,不是所有类同名的变量都是一样的值。在这里虽然三个类里面都有age,但这里可以认为是三个变量。
打个比方:
你和我都是一个类,都有一个属性name,加static的意思就是我把名字登记到户口本上(就相当于静态变量加载到方法区)。我的name无论到哪里都是固定不变的。
但这并不代表我的name和你的name是一样的!

作者: 邱俊杰    时间: 2012-4-16 23:34
虽然变量名是一样的,但是所属的类是不同的,这是由区别的。
System.out.println(age);   这个是调用你本类的变量。
System.out.println(f.age);  这个是调用父类的变量,继承变量时不可以被覆盖的
System.out.println(z.age);  这个是调用i子类的变量。





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