java - 静态成员的顺序在 Swing 中是否敏感?

标签 java swing singleton static-members

我有这个类,比方说,Foo。它扩展了 JFrame 并且是一个单例。也就是说,它有两个静态字段:1) Foo 的实例和 2) Color

这是 Foo 的代码片段:

public class Foo extends JFrame{
    private static final Color FOO_RED = new Color(155, 64, 69);
    private static final Foo INSTANCE = new Foo();

    private Foo(){
        //do stuff
    }

    public static Foo getInstance(){
        return INSTANCE;
    }
}

我还有另一个类,比方说,Launcher。这是负责启动应用程序的主类。这是一个简单的类,因为它唯一的工作就是将构造 Foo 的任务委托(delegate)给 EDT

这是Launcher的代码片段:

public class Launcher{
    public static void main(String[] args){
        SwingUtilities.invokeLater((new Runnable(){
            @Override
            public void run()
            {
                Foo.getInstance();
            }
        }));
    }
}

现在,一切正常。 但是,当我切换Foo 字段的顺序时(见下文),使用FOO_RED 的组件不再涂这种颜色。

public class Foo extends JFrame{
    private static final Foo INSTANCE = new Foo(); //declared before Color
    private static final Color FOO_RED = new Color(155, 64, 69);

    private Foo(){
        //do stuff
    }

    public static Foo getInstance(){
        return INSTANCE;
    }
}

那么,这就引出了一个问题,当涉及到 Swing 时,静态字段 的顺序是否重要?

最佳答案

如前所述,静态字段的顺序很重要。按照它们出现的顺序执行。

我将对这个示例进行另一个更改。这将使您的静态字段顺序变得不那么重要。

更新:使用 IDOH (Initialization on Demand Holder)使单例线程安全的模式。

private static class FooHolder {
    private static final Foo INSTANCE = new Foo();
}

public static Foo getInstance(){
    return FooHolder.INSTANCE;
}

关于java - 静态成员的顺序在 Swing 中是否敏感?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6153581/

相关文章:

cocoa-touch - @property 指向单例(或共享实例): strong or weak and why?

java - 如何使这个单元测试独立?

java - 在 JTextArea 下面添加按钮

java在查询后设置id

java - 如何在 MigLayout 中用背景颜色填充跨越区域?

c# - 使用私有(private)静态方法使单例线程安全?

node.js - 如果导出的模块函数被调用两次,则会抛出错误

java - 在 ArrayList 的 add() 方法中创建新对象会导致内存泄漏。我能做些什么不同的事情?

java - 类变成内部类时Maven编译失败(虽然Eclipse很好)?

Java:System.arraycopy 没有复制我的数组