Java : Instantiating method variables

标签 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 变量会发生什么?垃圾收集器是否会在任何阶段来销毁它们?我没想到还有任何东西仍然引用他们。 有什么方法可以访问这些旧的 fooFrame 吗?假设我想更改十个 fooFrame 中的第四个 JPanel 上的文本颜色。有办法做到这一点吗?

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

最佳答案

What happens to these old fooFrame variables? Does the garbage collector come and destroy them at any stage?

您的对象desktop正在引用 fooFrame在该方法中创建的,每个都将具有不同的引用,并将由 desktop 维护。一旦desktop超出范围,他们将有资格进行垃圾收集。通常,方法变量在控件脱离方法后有资格进行垃圾回收,因为它们是在方法范围内维护的,但在您的情况下,您有 desktop这是维持在类(class)水平的。

关于Java : Instantiating method variables,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16207790/

相关文章:

java - 在javacard中将十六进制字符串转换为字节数组

javascript - 转换 jquery/js 函数以将页面之间的变量传递给 ColdFusion 变量

php - 将字符串转换为变量

java - 在java中检索具有Predicate返回类型的方法的值

oop - 我可以说构造函数是方法吗?

Java连接到postgresql数据库

java - 流口水:不区分大小写比较?

java - 日志消息不写入日志文件

php - PHP Mysql Codeigniter 应用程序中的 session 变量大小增加

Java 程序在从 main() 拉出的变量之间输出空格,这很好。不过我想删除尾随空格