2016-05-15 112 views
0

我正在处理我的第一个Swing应用程序,现在想出了一个难题:在静态初始化期间或开始实际执行后执行引导和资源初始化。这是什么意思?我有Application单:静态初始化期间的资源初始化?

public enum Appliation{ 
    INSTANCE; 

    private static void initResources(){ 
     //init resources 
    } 

    private Application(){ 
     initResources(); 
    } 

    public void run(){ 
     //display the gui 
    } 

    //remainders omitted 
} 

所以main方法看起来就像

public static void main(String[] args){ 
    Application app = Application.INSTANCE; 
    app.run(); 
} 

或者,也许我的手初始化资源它启动后,然后运行它。什么是合乎逻辑的正确方法?

回答

4

如果可能,请避免使Applicationenum单身。如果它是一个普通的类,你可以在构造函数中执行初始化。

public static void main(String[] args) { 
    Application app = new Application(); 
    app.run(); 
} 

这使得当类初始化,这是很好的原因很多main()控制。如果初始化速度很慢,main()控制何时发生线程。如果可能例外,main()可以捕获它们。 main()也可以设置线程默认的异常处理程序,配置日志记录,或执行应该在Application的初始化之前的其他启动任务。

1

如果你需要一个singleton,我会亲自lazy initialization继续,你可以得到例外,同时初始化你的资源,例如,如果你实现它作为一个简单的单,你可以导致错误的类的静态初始化期间获得异常很难找到。

public class Application { 

    private Application() { 
     initResources(); 
    } 

    private void initResources(){ 
     //init resources 
    } 

    public static Application getInstance() { 
     return ApplicationHolder.INSTANCE; 
    } 

    public void run(){ 
     //display the gui 
    } 

    //remainders omitted 

    /** 
    * Static inner class used to lazy initialize the Application, it will 
    * be loaded only on Application.getInstance() such that if it fails, 
    * you will easily understand that is while initializing the Application 
    */ 
    private static class ApplicationHolder { 
     private static final Application INSTANCE = new Application(); 
    } 
} 

然后你main方法是这样的

public static void main(String[] args){ 
    Application app = Application.getInstance(); 
    app.run(); 
}