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