JLabel变量重用?

时间:2014-07-07 16:38:43

标签: java variables jlabel

我不明白我们如何使用相同的JLabel变量来创建新标签。这里的aLabel变量不是指同一个对象(标签)。那我们怎么能得到4个标签?

我可以使用其他类对象或仅使用组件类来执行此行为吗?

这里逐步执行代码流程的说明会很有帮助。

 JLabel label1 =newJLabel("First label"); 
add(label1, BorderLayout.NORTH); 
JLabel label2 =newJLabel("Second label"); 
add(label2, BorderLayout.SOUTH); 
JLabel label3 =newJLabel("Third label"); 
add(label3, BorderLayout.CENTER); 

或者我可以使用:

JLabel aLabel =newJLabel("First label"); 
        add(aLabel, BorderLayout.NORTH); 
        aLabel =newJLabel("Second label"); 
        add(aLabel, BorderLayout.SOUTH); 
        aLabel =newJLabel("Third label"); 
        add(aLabel, BorderLayout.CENTER);

3 个答案:

答案 0 :(得分:1)

在这种情况下,aLabel只是对内存中对象的引用。当你这样做时:

aLabel = newJLabel("Second label");

您正在更改引用以指向与第一个标签完全不同的对象。基本上这就是"把这个东西放在等式的右边,让一个标签指向它。"然后,当你打电话

add(aLabel, BorderLayout.SOUTH);

实际上,您添加的对象与第一次调用时完全不同。

在另一种情况下,您只需为每个对象创建一个新的引用。

答案 1 :(得分:1)

你需要记住,当标签对象被添加时,它会保留对标签对象的引用 - 它不会被遗忘"供你重复使用。在第二种情况下,您只是更改同一标签的名称并将其添加到用户界面中的多个位置 - 但是当您更改标签的文字时,您需要更改您已在UI中的其他位置添加的完全相同的对象

理论上你可以安全地重用JLabel s,但只有当没有其他东西(包括UI)拥有对它的引用时。在实践中,不要打扰 - 它会产生混乱,容易出错的代码。如果你想在某个地方买一个新标签,只需创建一个新的标签对象,让GC清除任何未使用的旧标签。

答案 2 :(得分:1)

更好的是,为什么不呢?

    add(new JLabel("First label"), BorderLayout.NORTH); 
    add(new JLabel("Second label"), BorderLayout.SOUTH); 
    add(new JLabel("Third label"), BorderLayout.CENTER);

当然,如果您需要引用该JLabel,那么您将失去运气(因为您未能在对象中保留引用)。

这是许多JLabel变量的真正动力,他们希望保留对每个创建的JLabel的引用。也许那些参考文献并没有被用于任何特定的目的,但许多人创造它们并且#34;以防万一"他们将来需要一个JLabel的句柄。

在某些时候,你需要减少损失,然后继续使用它。也许重要的是以这种方式进行优化,也许不是。如果它很重要,那么您通常会编写一些代码来证明性能的提高。如果您没有编写该代码,那么您无法证明自己做得更好。

有趣的是,在编写代码来跟踪您关注的性能类型时,您很快发现代码的许多方面都存在一些性能影响问题无关紧要;因为它们很少被使用,导致很少感受到影响,或者它们被更大的问题所掩盖。

在不进行某种分析的情况下进行更改有时可以提供解决方案,但通常它只是一种黑暗的方法,类似于过早优化。