Java:实例化方法变量

时间:2013-04-25 06:24:17

标签: java variables methods instantiation

我对Java编程比较陌生,可能错过了一些明显的东西,所以请耐心等待。

我正在创建一个程序,它使用Swing API和JDesktopPane来创建GUI。在主屏幕上是一个显示“新窗口”的按钮。用户单击它并实例化新的JInternalFrame并将其添加到JDesktopPane。如下所示,简化方法:

protected void createNewWindow(JPanel panel) {

    JInternalFrame fooFrame = new JInternalFrame();
    fooFrame.setContentPane(panel);
    desktop.add(fooFrame);
}

我的问题是这个。假设用户单击该按钮十次。创建了十个JInternalFrame。所有这些都是方法变量,因此它们具有相同的名称。

这些旧的fooFrame变量会发生什么?垃圾收集器在任何阶段都会来破坏它们吗?我不会想到任何东西仍然提到他们。 有没有办法访问这些旧的fooFrames?假设我想在十分之四的fooFrame上更改JPanel上的文本颜色。有什么办法吗?

我知道这是一种非常愚蠢的方法,只需创建一个JInternalFrame实例变量(可能是一个数组)来实例化方法并添加到JDesktopPane中。我的问题更多是出于好奇而不是任何事情。

1 个答案:

答案 0 :(得分:2)

  

这些旧的fooFrame变量会发生什么?垃圾   收藏家在任何阶段来摧毁他们?

您的对象desktop持有对方法中创建的fooFrame的引用,每个对象都有一个不同的引用,并由desktop维护。一旦desktop超出范围,他们就有资格进行垃圾收集。通常方法变量在控制出来之后有资格进行垃圾收集,因为它们是在方法范围内维护的,但在你的情况下,你有desktop维护在类级别。