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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

class A
{
        static String name;
        static int age;

        public static void show()
        {
                System.out.println(name+age);
        }
}

class JingTaiTest
{
        public static void main(String[] args)
        {
                A a = new A();
                a.name = "刘德华";
                a.age = 18;
                a.show();

                System.out.println("+++++++++++++++");

                a = null;
                a.show();
        }
}

评分

参与人数 1黑马币 +1 收起 理由
闫黎旭 + 1 神马都是浮云

查看全部评分

9 个回复

倒序浏览
a = null;
a.show();
为什么还可以打印?
回复 使用道具 举报
感觉应该是A类中的成员变量与方法都是静态的,只要类创建,这些静态的就创建,而且他们存储在内存的方法区中,new A();是在堆内存中开辟空间,a指向这个内存地址,a=null,只是赋予空地址,而类A中的静态变量与方法还是存在的,所以还能打印。

不知道解释的对不对!
回复 使用道具 举报
那你a都没有指向了,怎么去获取的方法中的name和age?
回复 使用道具 举报
没想通 等楼下解决
回复 使用道具 举报
因为类名.就是静态属性跟方法的引用,不需要对象都可以用,等不等于null   没影响
回复 使用道具 举报
被静态修饰的成员变量被该类所有对象共享,该成员变量随着类的加载而加载,优先于对象存在。读懂这三句话你就知道为什么是那样的结果了。
回复 使用道具 举报
a虽然不再指向堆内存了 但a还是一个A 所以这个调用还是有效的
回复 使用道具 举报
学习了 顶顶
回复 使用道具 举报
静态成员是随着类的加载而加载的,它们放在了方法区中。当当创建对象a时,你用这个对象调用了成员,所以静态成员name、age、show都被加载进了栈中,和栈中的a放在了一起。
当a的值为null了,所以它没有指向对象了,但是因为栈中还保存的有name、age和show呀,所以当然能够调用了。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马