sinat_25234961
2015-09-11 07:01
采纳率: 70.6%
浏览 2.1k
已采纳

java 日历Calendar c为什么不能作为对象而是要在方法里建立

import static java.lang.System.out;
import java.util.*;

class Fullmoons{
static int DAY_IM=1000*60*60*24;
/*

/
public static void main(String[] args){
Calendar c=Calendar.getInstance();
c.set(2004,1,7,15,40);

long day1=c.getTimeInMillis();
for(int x=0;x<60;x++){
day1+=(DAY_IM*29.52);

c.setTimeInMillis(day1);
out.println (String.format("full moon on %tc",c));
}
}
}
程序是对的,检验过,就是想问
Calendar c=Calendar.getInstance();
c.set(2004,1,7,15,40);

这个如果是在方法外面(/
*/位置)就是错误,是为什么。
我知道Calendar是个抽象的类,不能用new建立实例。但我用getInstance()建立C作为对象,感觉按理说也应该可以啊。

  • 点赞
  • 写回答
  • 关注问题
  • 收藏
  • 邀请回答

4条回答 默认 最新

  • hekewangzi 2015-09-11 08:09
    已采纳

    方法里同样是new了一个Calendar 对象然后再返回来的

    它在方法里new可以控制这个对象产生的个数,假如在堆里有这个对象了就不会再new了

    然而你说的为什么在方法外不能使用,,你见过在方法外面直接调用某个方法的??Calendar.getInstance();这样写相当于是一个语句了

    Java中任何语句都是在方法中写的啊

    点赞 打赏 评论
  • 纸飞行机 2015-09-11 08:43

    Fullmoons类没有new出实例,如果是在方法外面,会报错的,我也不是很懂,仅供参考。。

    点赞 打赏 评论
  • grandville 2015-09-11 10:19

    Calendar c=Calendar.getInstance(); 这句话在方法外面写是没问题的,这样就相当初始化一个成员变量。
    c.set(2004,1,7,15,40)可以在代码块或者静态代码块中写。这是java基本语法,没什么好商量的。
    至于你说的为什么不能new出来,所谓的getInstance中获取的是Calendar的子类,向上转型为Calendar类了。
    至于这种设计的目的,可能有很,例如楼上说的缓存,也可能是其他原因。。

    点赞 打赏 评论
  • havedream_one 2015-09-11 12:28

    Calendar c=Calendar.getInstance(); 必须放到方法体里面,方法外是定义属性

    点赞 打赏 评论

相关推荐 更多相似问题