直接定义在方法中的变量是方法中的局部变量,书上说,这种变量的生命周期就是直到方法结束,方法结束后,变量就消失了,好像从来没有来到过这个世界上。
import javax.swing.*;public class Test {
public static void main(String[] args) {
new Frame();
}
}class Frame extends JFrame{
Frame(){
setVisible(true);
setSize(300,300);
JButton b =new JButton("x");
add(b);
}
}问题:上面这段代码,我的JButton是定义在构造方法里的,应该是构造方法一结束,它就消失了才对,可是为什么,我运行程序显示出来的窗口里,有button??
import javax.swing.*;public class Test {
public static void main(String[] args) {
new Frame();
}
}class Frame extends JFrame{
Frame(){
setVisible(true);
setSize(300,300);
JButton b =new JButton("x");
add(b);
}
}问题:上面这段代码,我的JButton是定义在构造方法里的,应该是构造方法一结束,它就消失了才对,可是为什么,我运行程序显示出来的窗口里,有button??
解决方案 »
- postgres里面有个表user,user表里有一个字段username,当username为a_b时,我要把所以带'_'的字符查出来,要怎么查呀.
- JTable 能实现undo redo功能吗?
- 散分200讨论JAVA的GC机制!!!!!!!!!!!!!!!!!!!!!!!!高手请进
- 紧急求救!关于用SWING编写文本编辑器。
- Java中没有sizeof操作符,如何显示primitive Date types所占的字节数。
- 怎样在VisualAge for Java中使用jdk1.4
- 怎样通过程序获取机器软硬件信息?
- 怎么将JRE放在局域网内让客户端下载啊?
- Java能否实现服务器端的push技术
- 有关sqlserver连接的问题,高手请务必进来!!!!!
- 帮忙解决一个问题
- java难题 ,求解?
是局部变量对象引用 ,但是 Frame引用他了 ,所以 不会回收
但是其实际指向new JButton("x")被其他对象所引用了所以说构造函数完成时,局部变量b已经销毁,但是它所指向的实际对象要等到没有被其他对象引用的时候才会被gc
你把 变量 跟 对象 混淆了。
JButton b =new JButton("x");b 是个变量,new JButton("x") 是个对象。b这个变量的空间,函数结束就可以释放了;但new JButton("x")这个对象所占用的空间是否能释放,要看其有没有被任何其它变量(成员属性)所引用。
Jbutton 对象没有消失?
所以他会存在!
setVisible(true);
setSize(300,300);
JButton b =new JButton("x");
add(b);
}
这个构造方法。你说的局部变量的说法是正确的,但这和出现Button没关心。Button出现就是因为新建对象调用了构造方法。