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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 林豪 中级黑马   /  2012-4-16 22:09  /  1614 人查看  /  5 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

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不是在内存中开辟了一块空间吗?那么变量名一样为什么还能同时存在且不同?

5 个回复

倒序浏览
个人认为,是一个类的每个对象共用 ,不是所有类都共用
回复 使用道具 举报
static修饰的属性是属于类的 此题中的age分别属于Fu和Zi类 所以是两个变量  int age=25是个局部变量  楼主懂了吧
回复 使用道具 举报
static修饰的静态变量是属于类,不属于某个特定的对象,而楼主定义的age静态变量分别属于Fu和Zi,他们是两个不同的变量,在内存中分配不同的地址,所以他们的结果不会相同
回复 使用道具 举报
本帖最后由 王永旺 于 2012-4-16 23:17 编辑

是每一个类的统一变量都用一个,不是所有类同名的变量都是一样的值。在这里虽然三个类里面都有age,但这里可以认为是三个变量。
打个比方:
你和我都是一个类,都有一个属性name,加static的意思就是我把名字登记到户口本上(就相当于静态变量加载到方法区)。我的name无论到哪里都是固定不变的。
但这并不代表我的name和你的name是一样的!
回复 使用道具 举报
虽然变量名是一样的,但是所属的类是不同的,这是由区别的。
System.out.println(age);   这个是调用你本类的变量。
System.out.println(f.age);  这个是调用父类的变量,继承变量时不可以被覆盖的
System.out.println(z.age);  这个是调用i子类的变量。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马