私はこのチュートリアルを以下だし、あなたのシングルトンクラスは、多くのリソースを使用していない場合http://www.journaldev.com/1377/java-singleton-design-pattern-best-practices-examplesgetInstance()またはgetInstance()の前にインスタンス化が行われましたか?シングルトンを作成するため
public class EagerInitializedSingleton {
private static final EagerInitializedSingleton instance = new EagerInitializedSingleton();
//private constructor to avoid client applications to use constructor
private EagerInitializedSingleton(){}
public static EagerInitializedSingleton getInstance(){
return instance;
}
}
以下の方法が、これは使用する アプローチがあるときに所有者がコメントを持っています。しかし、ほとんどのシナリオでは、ファイルシステム、データベース接続などのために、シングルトンクラスは です。 およびクライアントが getInstanceメソッドを呼び出さない限り、インスタンス化は避けてください。
問題である:
彼らは、我々はクライアントがgetInstanceメソッド を呼び出しますが、私はこのコードで知っているように(オブジェクトインスタンスの)インスタンス化が常にときの状況がない限りまでインスタンス化を避ける必要がありを言いますクラスEagerInitializedSingleton
負荷、およびEagerInitializedSingleton
ただ唯一、我々はEagerInitializedSingleton.getInstance()
は=>のインスタンスがgetInstance()
getInstance()
、決してとの時間に起きただろう呼び出すときにロード 参考:(クラスローダが最初にクラスをロードするとき)
静的変数は、実行の開始時に、一度だけ初期化されます。 (https://stackoverflow.com/a/8704607/5381331)
クラスはいつロードされますか? - ;
- 及びバイトコードは、例えば、クラス(、システムへの静的参照を行うときに、新しいバイトコードが実行される(例えば、FooClass F =新しいFooClass())
:
はちょうど二つの場合があります。アウト) (http://www.javaworld.com/article/2077260/learn-java/learn-java-the-basics-of-java-class-loaders.html)
私は間違っているか正しくありません。私にいくつかの甘さを与えてください。
ご説明いただきありがとうございます。それは私がJava alotを理解するのに役立ちます –
@PhanVanLinhようこそ! – Mena