나는이 자습서를 수행하고있어 당신의 싱글 톤 클래스는 많은 자원을 사용하지 않는 경우 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;
}
}
아래의 방법이 사용하기에 접근 방식 인 경우 소유자는 의견이있다. 그러나 대부분의 시나리오에서 파일 시스템, 데이터베이스 연결 등 및 과 같은 리소스에 대해 Singleton 클래스는 입니다. 클라이언트가 getInstance 메서드을 호출하지 않는 한 인스턴스화는 피해야합니다.
문제는 :
그들은 항상했을 때 내가 (객체 인스턴스의)이 코드에서 인스턴스화를 알고 클라이언트 방법 의 getInstance를 호출하지 않는 한 때까지하지만 우리가 인스턴스화하지 않도록해야 말 클래스 EagerInitializedSingleton
로드 및 EagerInitializedSingleton
은 호출 할 때만로드됩니다. EagerInitializedSingleton.getInstance()
=> 인스턴스화는 getInstance()
및 그 이전에는 발생하지 않았으며 시간이 지나면 발생했습니다. getInstance()
기준 (클래스 로더 처음 클래스를로드 할 때)
정적 변수가 실행을 시작할 때, 단 한번 초기화된다. (https://stackoverflow.com/a/8704607/5381331)
클래스가로드되는시기는 언제입니까? -;
- 상기 바이트 코드는, 예를 들면 클래스 (시스템에 정적 참조 할 때, 새로운 바이트 코드를 실행한다 (예를 들어, FooClass F = 새로운 FooClass())
:
는 정확히 두 개의 경우가있다. out) (http://www.javaworld.com/article/2077260/learn-java/learn-java-the-basics-of-java-class-loaders.html)
내가 틀렸거나 정확하지 않습니까? 제발 좀 줘.
잘 설명해 주셔서 감사합니다. 그것은 내가 Java를 이해하는 데 도움이됩니다 –
@ PhanVanLinh 당신을 환영합니다! – Mena