java的Calendar类的问题

看到一段程序打印系统时间用的代码是
Calendar ca1=Calendar.getInstance();
System.out.println(ca1.getTime());
问下为什么不写成
Calendar ca1=new Calendar();
System.out.println(ca1.getTime());
也就是为什么不用new关键字创建呢?这样为什么不会错?

第1个回答  2011-12-18
Calendar 使用getInstance()方法获取一个对象 此方法为静态的 类名直接调用
Calendar的构造方法限定修饰词为protected 应用范是本类,子类,以及同一包下的其他类,
你如果想使用 Calendar ca1=new Calendar();这中方式 那么这段代码所在的类必须为Calender的子类或跟Calender类在同一包下,否则是错误的
第2个回答  2011-12-18
Calendar创建实例是自带类的方法来实现的,根据Calendar封装起来的原代码的静态方法,也相当单利模式!你懂得 呵呵追问

不懂!我还是java初学者

追答

也就等于一个类里面的静态方法!属于本类

第3个回答  2013-05-03
因为它是个静态的方法,静态方法为类所有,可以通过对象来使用,也可以通过类来使用。但一般提倡通过类名来使用
第4个回答  2011-12-18
你可以看源代码,因为它是个静态的方法,静态方法为类所有,可以通过对象来使用,也可以通过类来使用。但一般提倡通过类名来使用,因为静态方法只要定义了类,不必建立类的实例就可以使用。希望可以帮到你追问

那为什么建立类实例反而是错的呢?

追答

因为Calendar这个类是一个抽象类,抽象类不象具体类那样描述一类具体事物,它是提取多种具有相似性的具体事物的共同特征而产生的,比如,helicoptor, jet, fighter父类plane,有start(),takeOff(),speedUp(),changeDirection()等方法,这是共性,但现实中有一个具体的plane吗?没有,它是抽象出来的,根本不存在。所以实例化一个plane是没有意义的,因此面向对象程序设计机制禁止对象实例化

本回答被提问者采纳
相似回答