JAVA,calendar

在创建日历对象时Calendar cal =Calendar.getInstance();为什么不用加new

Calendar是抽象类,不能直接实例化,getInstance()方法返回的是Calendar的子类的实例对象

因为日历是个单例
Calendar.getInstance()就是去获取它的唯一实例

参考GPT和自己的思路:

在Java中,通过调用静态方法来实例化一个类对象是一种常见的模式。Calendar类中的getInstance()方法就是这种模式的一个例子。这个方法返回的是一个Calendar类对象,因此你不需要使用new关键字来创建一个实例。此外,Calendar类是一个抽象类,它没有公共构造函数,因此getInstance()方法提供了一种方便的方法来获取一个可用的Calendar类对象。

可以去了解一下单例模式(整个应用中只有一个对象,这个对象在系统启动就new好了,或者getInstance方法里判断一下,第一次new,后面都直接用),我觉得题主你更想了解为什么Calendar要设计成单例模式:

  1. 日历对象相当于办公室里的钟表
  2. 任何人需要用看时间的时候,可以看手机也可以看手表,还可以看挂在墙上的钟表
  3. 每个表的时间可能不一样,导致公司开会时总有人早到或者晚到,因为大家的时间来源不统一
  4. 公司决定:所有人不允许佩戴手表,也不允许使用手机,只能看墙上的钟表,这样大家时间来源统一了,也不用买手机手表浪费钱

Java里也一样:既能保证各个线程使用的时间来源一致,也能保证内存中不会存在多个Calendar对象,减少资源浪费

  • 帮你找了个相似的问题, 你可以看下: https://ask.csdn.net/questions/742695
  • 我还给你找了一篇非常好的博客,你可以看看是否有帮助,链接:Java时间Calendar
  • 除此之外, 这篇博客: Java 常用类 Calendar类 ,日历类使用详细教程。中的 常用的方法是 Calender.getInstance();返回 Calendar子类的实例。 部分也许能够解决你的问题, 你可以仔细阅读以下内容或跳转源博客中阅读:
  • Calendar calendar = Calendar.getInstance();
    

    这是一个类的多态的实现,左父右子(左边父类的引用指向了子类的对象)