我是这么理解的,
Calendar类是个抽象类,里边可以定义抽象方法和不抽象方法,
public static Calendar getInstance();这个方法的构成很可能是采用类似单例模式,返回一个Calendar 对象;
但是因为抽象方法不能new对象,它又去调用了private static Calendar createCalendar(TimeZone zone,Locale aLocale)方法,调用里边的机制去生成一个Calendar 的对象,里边的具体实现我就不是很了解,这是部分源码:
public static Calendar getInstance()
{
Calendar cal = createCalendar(TimeZone.getDefaultRef(), Locale.getDefault());
cal.sharedZone = true;
return cal;
}
private static Calendar createCalendar(TimeZone zone,
Locale aLocale)
{
// If the specified locale is a Thai locale, returns a BuddhistCalendar
// instance.
if ("th".equals(aLocale.getLanguage()) && ("TH".equals(aLocale.getCountry()))) {
return new sun.util.BuddhistCalendar(zone, aLocale);
}
else if ("JP".equals(aLocale.getVariant()) && "JP".equals(aLocale.getCountry()) && "ja".equals(aLocale.getLanguage())) {
return new JapaneseImperialCalendar(zone, aLocale);
}
// else create the default calendar
return new GregorianCalendar(zone, aLocale);
} |