在创建日历对象时Calendar cal =Calendar.getInstance();为什么不用加new
Calendar是抽象类,不能直接实例化,getInstance()方法返回的是Calendar的子类的实例对象
因为日历是个单例
Calendar.getInstance()就是去获取它的唯一实例
参考GPT和自己的思路:
在Java中,通过调用静态方法来实例化一个类对象是一种常见的模式。Calendar类中的getInstance()方法就是这种模式的一个例子。这个方法返回的是一个Calendar类对象,因此你不需要使用new关键字来创建一个实例。此外,Calendar类是一个抽象类,它没有公共构造函数,因此getInstance()方法提供了一种方便的方法来获取一个可用的Calendar类对象。
可以去了解一下单例模式(整个应用中只有一个对象,这个对象在系统启动就new好了,或者getInstance方法里判断一下,第一次new,后面都直接用),我觉得题主你更想了解为什么Calendar要设计成单例模式:
Java里也一样:既能保证各个线程使用的时间来源一致,也能保证内存中不会存在多个Calendar对象,减少资源浪费
Calendar calendar = Calendar.getInstance();
这是一个类的多态的实现,左父右子(左边父类的引用指向了子类的对象)