多个实例v。单个静态实例

时间:2011-11-14 12:08:33

标签: java oop memory-management coding-style static-members

假设我有这个自定义组件。它是子类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成员变量会更有效,或者是当前的设置(即上面的代码)就好了(内存管理方式)?

3 个答案:

答案 0 :(得分:2)

我想说使用一个命名实例,不是因为内存,而是因为如果您决定更改字体,则必须在10+位置进行编辑。

public static final Font MENU_FONT = new Font("Courier New", Font.BOLD, 12);

编辑:即使您使用子类,也最好将其声明为public static final,因为Font是常量。更清楚。

答案 1 :(得分:1)

我认为与Font的10个实例相关的内存开销不会成为真正关注的问题。但是,从代码样式来看,Font在此类型的所有实例中都是常量,因此我认为如果以这种方式处理您的代码将更具可读性。

答案 2 :(得分:0)

每次实例化Font时,您的代码都会构造一个新的JFooMenuItem对象。

如果您将其设为静态成员,则Font仅分配一次。