【问题标题】:Why do we instantiate Calendar Class(abstract) in Java为什么我们要在 Java 中实例化 Calendar Class(abstract)
【发布时间】:2013-07-09 20:06:21
【问题描述】:

我是一名初级 Java 程序员,我一直在阅读有关 Calendar 类的内容。它是一个抽象类,它的所有方法都是静态的,但它的用法如下:

Calendar cal = Calendar.getInstance();

你在哪里使用cal来调用方法,比如:

cal.setTimeinMillis(day1); 

我对此感到困惑。当调用一个类的方法时,为什么我们需要一个引用变量?这对于静态方法是合法的吗?

【问题讨论】:

  • Calender 类使用Singleton Pattern,这是getInstance() 的派生源。这允许您静态获取对Calender 的实例引用,从而允许您使用实例(非静态)方法。

标签: java oop static


【解决方案1】:
Calendar cal = Calendar.getInstance();

不是调用构造函数,它只是调用返回某个子类(Calendar)实例的(静态)方法。

【讨论】:

    【解决方案2】:

    再看the documentation; Calendar 的大多数方法(除了 getInstance() 方法)都不是静态的,并且需要一个实例(这确实是日历所代表的时刻的容器)。

    【讨论】:

      【解决方案3】:

      1) 日历不是日历

      2) Calendar.getInstance() 将返回日历的一些具体实现,可能是GregorianCalendar

      3) cal.setTimeinMillis(day1); 是对象方法,不是静态的。

      【讨论】:

        【解决方案4】:

        setTimeInMillis() 不是静态的。您需要调用 getInstance() 方法来返回实例的原因是有多个 getInstance() 方法,您可以针对不同的时区和/或与默认设置不同的语言环境调用它们。您选择的时区或地区会影响其他方法的工作方式。

        【讨论】:

          猜你喜欢
          • 2011-07-16
          • 1970-01-01
          • 1970-01-01
          • 2014-03-08
          • 2019-02-17
          • 1970-01-01
          • 1970-01-01
          • 2012-10-08
          • 2021-10-15
          相关资源
          最近更新 更多