关于局部变量的问题
直接定义在方法中的变量是方法中的局部变量,书上说,这种变量的生命周期就是直到方法结束,方法结束后,变量就消失了,好像从来没有来到过这个世界上。
- Java code
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??
[解决办法]
你的JButton b =new JButton("x");
是局部变量对象引用 ,但是 Frame引用他了 ,所以 不会回收
[解决办法]
jbutton b 局部变量指的是它
但是其实际指向new JButton("x")被其他对象所引用了
所以说构造函数完成时,局部变量b已经销毁,但是它所指向的实际对象要等到没有被其他对象引用的时候才会被gc
[解决办法]
[解决办法]
你的局部变量 在方法结束后销毁了
Jbutton 对象没有消失?
所以他会存在!
[解决办法]
你在主方法里new了一个Frame对象,自然调用了 Frame(){
setVisible(true);
setSize(300,300);
JButton b =new JButton("x");
add(b);
}
这个构造方法。你说的局部变量的说法是正确的,但这和出现Button没关心。Button出现就是因为新建对象调用了构造方法。
[解决办法]
[解决办法]
add(b),把JButton对象的实例添加到了JFrame(就是相当于this的)对象了,b是局部变量,出了构造函数它不存在了,但是JFrame中还有刚才创建的JButton对象的引用。