黑马程序员技术交流社区
标题:
怎么解释这个,班里五六个人没法解释.求画图
[打印本页]
作者:
HM黑马
时间:
2015-7-2 23:05
标题:
怎么解释这个,班里五六个人没法解释.求画图
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();
}
}
作者:
HM黑马
时间:
2015-7-2 23:07
a = null;
a.show();
为什么还可以打印?
作者:
very爱
时间:
2015-7-2 23:31
感觉应该是A类中的成员变量与方法都是静态的,只要类创建,这些静态的就创建,而且他们存储在内存的方法区中,new A();是在堆内存中开辟空间,a指向这个内存地址,a=null,只是赋予空地址,而类A中的静态变量与方法还是存在的,所以还能打印。
不知道解释的对不对!
作者:
HM黑马
时间:
2015-7-2 23:35
那你a都没有指向了,怎么去获取的方法中的name和age?
作者:
fmi110
时间:
2015-7-2 23:55
没想通 等楼下解决
作者:
shuaiqi_P_D
时间:
2015-7-2 23:55
因为类名.就是静态属性跟方法的引用,不需要对象都可以用,等不等于null 没影响
作者:
冷雨敲窗被未温
时间:
2015-7-3 00:09
被静态修饰的成员变量被该类所有对象共享,该成员变量随着类的加载而加载,优先于对象存在。读懂这三句话你就知道为什么是那样的结果了。
作者:
双栖动物
时间:
2015-7-3 00:31
a虽然不再指向堆内存了 但a还是一个A 所以这个调用还是有效的
作者:
fmi110
时间:
2015-7-3 08:47
学习了 顶顶
作者:
yky1678
时间:
2015-7-3 09:00
静态成员是随着类的加载而加载的,它们放在了方法区中。当当创建对象a时,你用这个对象调用了成员,所以静态成员name、age、show都被加载进了栈中,和栈中的a放在了一起。
当a的值为null了,所以它没有指向对象了,但是因为栈中还保存的有name、age和show呀,所以当然能够调用了。
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2