为什么test为空了,还能使用test.i,打印出7来? public class Test { private static int i=7; public static void main(String[] args) { Test test=new Test(); test=null; System.out.println(test.i); }}为什么test为空了,还能使用test.i,打印出7来? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 和static有关不知道为什么 test = null并没有释放它的内存空间吧,要等着垃圾回收器回收,而垃圾回收器什么时候回收是不定的 首先不应该使用test.i,应该使用类名.属性只要类被classLoader进JVM,就可以通过类名.的方式找到栈中的这个属性 这样解释更好理解首先你要知道被static修饰的变量是静态变量,它不同其他基本数据类型或者对象的引用,静态变量是放在内存的静态块里的,而其他变量则是放在栈内存里的。。当你创建一个test引用后,实际上test是放在栈里的,你令test=null,只是操作栈里的引用,而真正放在静态块里的i并未改变,它一直存放在那,直到你要调用它。所以你打印的i肯定是7 http://blog.csdn.net/ZangXT/archive/2009/09/10/4537376.aspx private static int i=7;有STATIC修饰了,这个是静态变量,类一加载就会有的,与某个具体的实例无关 STATIC 就是静态变量,不可改变的,一次就存到内存中去了,改不了也!呵呵 static和对象没有关系类级的 static修饰的都存放在栈内存中的,跟类对象的堆内存NULL OR NOT NULL 无关! 只要有这个类就有private static int静态的,就是恒常的。 System.out.println(test.i); 你编译完了以后就变成这样的了System.out.println(7);所以跟test没有一毛钱关系. 静态变量这个东西...在编译的时候就已经替换了...你编译完了以后就变成这样的了System.out.println(7); 所以你改变test跟它也没有关系了... 请问怎么在swing界面显示多行静态文本? JDBC里一个问题 JTable怎么没有显示出来 亲人请教几个问题! 如何在textarea中保存格式?????? 图片移位问题 请给介绍个画饼图的java包!--高分有送! 某大牛公司笔试系统设计题,店小二智能问答实现设计 请教高手 关于JInternalFrame 的问题,求助! UltraEdit为什么列模式不好用啊 队列中元素个数怎么算?
不知道为什么
只要类被classLoader进JVM,就可以通过类名.的方式找到栈中的这个属性
首先你要知道被static修饰的变量是静态变量,它不同其他基本数据类型或者对象的引用,静态变量是放在内存的静态块里的,而其他变量则是放在栈内存里的。。当你创建一个test引用后,实际上test是放在栈里的,你令test=null,只是操作栈里的引用,而真正放在静态块里的i并未改变,它一直存放在那,直到你要调用它。所以你打印的i肯定是7
类级的
静态的,就是恒常的。
你编译完了以后就变成这样的了
System.out.println(7);所以跟test没有一毛钱关系.
System.out.println(7);
所以你改变test跟它也没有关系了...