【发布时间】:2011-11-14 12:08:33
【问题描述】:
假设我有这个自定义组件。它是JMenuItem 的子类,并且所有实例都使用相同的Font 对象,尽管没有一个共享相同的实例。例如,
public abstract class JFooMenuItem extends JMenuItem{
public JFooMenuItem(final String title){
super(title);
setFont(new Font("Courier New", Font.BOLD, 12));
}
}
现在,考虑到可能有多达 10 个以上的菜单项,将 Font 实例设为共享的 static 成员变量会更有效,还是当前设置(即上面的代码)只是很好(内存管理方面)?
【问题讨论】:
-
如果内存不是很紧并且这不是一个很小的程序,那么这就是过早的优化。如果这些菜单项一直在创建,那么这样做的真正原因是构建时间。
-
@larsmans,是的..你是对的。我想我只是想在第一时间把它做好..
-
@larsmans - 我不认为这是一个过早的优化。这里的辩论是:
protected Font font = new Font()或public static final Font font = new Font()。我认为第二种选择在编码风格上要好得多。 -
@larsmans - 我也认为
premature optimization被过多地用作编码不佳的借口。如果他再写两个字,程序员的手就不会断了。过早的优化是在你已经达到合理的性能时编写一些快速的花哨算法,并因此错过最后期限。编写干净的代码不是一种优化,而是一种必需。 -
当心:为配置子类化 JSomething 是不行的!仅当您必须添加功能和/或错误修复时,它们才会被使用,子类化。否则,请使用提供已配置组件的应用程序范围工厂。或者,如果应用程序中所有东西的外观应该相同,则将这些属性添加到 UIManager 可能是一种选择
标签: java oop memory-management coding-style static-members