2013-07-09 3 views
4

저는 초보자 인 Java 프로그래머입니다. 저는 Calendar 클래스에 대해 읽었습니다. 그것은 추상 클래스의 모든 메소드는 정적이지만, 다음과 같이 사용됩니다 :Java에서 Calendar 클래스 (추상)를 인스턴스화하는 이유

cal.setTimeinMillis(day1); 

내가 이것에 대해 혼란 스러워요 :

Calendar cal = Calendar.getInstance(); 

이 같은 메소드를 호출 할 cal를 사용하는 경우. 클래스에 대해 메소드를 호출 할 때 참조 변수가 필요한 이유는 무엇입니까? 정적 메소드의 경우이 메소드는 어떻게 적합합니까?

+1

Calender 클래스는 getInstance()가 파생 된 [Singleton Pattern] (http://en.wikipedia.org/wiki/Singleton_pattern)을 사용합니다. 이렇게하면 'Calender'에 대한 인스턴스 참조를 정적으로 가져 와서 인스턴스 (비 정적) 메소드를 사용할 수 있습니다. – chancea

답변

8
Calendar cal = Calendar.getInstance(); 

은 그냥 (Calendar의) 일부 서브 클래스의 인스턴스를 반환하는 정적 메소드를 호출하는 것, 생성자를 호출하지 않습니다.

3

the documentation을 다시 살펴보십시오. 흥미로운 (getInstance() 메소드 제외) 메소드를 수행하는 대부분의 Calendar 메소드는 정적이 아니며 인스턴스 (실제로 달력이 나타내는 시간의 컨테이너)를 필요로합니다.

2

1) 달력은 달력의 일부 구체적인 구현, 아마 GregorianCalendar를 반환합니다

2) Calendar.getInstance()을 Calandar되지 않습니다.

3) cal.setTimeinMillis(day1);은 정적이 아닌 객체 방법입니다.

1

setTimeInMillis()는 정적이 아닙니다. 인스턴스를 반환하기 위해 getInstance() 메서드를 호출해야하는 이유는 여러 getInstance() 메서드가 있으며 기본 시간과 다른 시간대 및/또는 다른 로캘로 호출 할 수 있기 때문입니다. 선택한 시간대 또는 로케일은 다른 방법의 작동 방식에 영향을 미칩니다.

관련 문제