main函数如下public static void main(String[] args) {
final JFrame jf = new JFrame();
jf.setSize(300, 200);
jf.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
JPanel panel = new JPanel();
jf.setContentPane(panel);
final String str = new String("string instance"); // str应该算是局部变量吧
JButton btn = new JButton("printStr");
panel.add(btn);
btn.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent arg0) {
System.gc(); //10行 垃圾回收
System.out.println(str); //11行 还能打印出“string instance”, 我的理解应为null;
}
});
SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
jf.setLocationRelativeTo(null);
jf.setVisible(true);
}
});
System.out.println(str); // 这个打印没问题
}// 这个地方主线程退出,我的理解,主线程退出了,str所指的内存应为成为垃圾,所以第10行回收了,
// 第11行应该打印为空才对. 我知道我的理解不对,但我想知道为什么?如果按我的理解,那主线程退出了
// jf 也应该变成内存垃圾了,但实事上不这是这样的,请大家看看,帮小弟解决这个疑惑,不胜感激!!
final JFrame jf = new JFrame();
jf.setSize(300, 200);
jf.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
JPanel panel = new JPanel();
jf.setContentPane(panel);
final String str = new String("string instance"); // str应该算是局部变量吧
JButton btn = new JButton("printStr");
panel.add(btn);
btn.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent arg0) {
System.gc(); //10行 垃圾回收
System.out.println(str); //11行 还能打印出“string instance”, 我的理解应为null;
}
});
SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
jf.setLocationRelativeTo(null);
jf.setVisible(true);
}
});
System.out.println(str); // 这个打印没问题
}// 这个地方主线程退出,我的理解,主线程退出了,str所指的内存应为成为垃圾,所以第10行回收了,
// 第11行应该打印为空才对. 我知道我的理解不对,但我想知道为什么?如果按我的理解,那主线程退出了
// jf 也应该变成内存垃圾了,但实事上不这是这样的,请大家看看,帮小弟解决这个疑惑,不胜感激!!
解决方案 »
- java DOM XML appendChild没用啊
- 一道编程题!大家帮我看看
- 关于数组初始化,请问如下程序有和错误
- 求小方法,如何在窗体上安放一个控件用来显示图片,是什么组件,用到什么方法?
- xml问题,难倒没人会,我发了还多帖子了。都是无满意结贴。
- 如何加密数据库字段的内容,并且这个字段还要能支持like查询
- 通过socket连接到ftp服务器上,如果ftp有密码,如何获取连接并能执行相应的命令?
- 求助:使用jbuilder9调试器时的问题(请高手赐教)
- Sql优化题目
- 各位大侠,weblogic websphere tomcat 各有什么特点,那个更好呢?
- 关于一个二进制范围的疑问,谢谢
- string长度的问题
恰好是这一行还引用了str :System.out.println(str);jf同理;