import java.util.*;
public class test2 {
public static void main(String[] args) {
Calendar c = Calendar.getInstance();
int index1 = c.get(Calendar.MONTH);
System.out.println("现在是今年的第"+index1+1+"个月");
System.out.println("现在是今年的第"+Calendar.MONTH+1+"个月");//上面的是标准,该行是错的,
//我的问题是为什么直接用Calendar.MONTH是错的,这个Calendar类的get(~)方法内部是怎么实现
//的呀.实在想不明白.请大神别复制了源代码然后不给解释呐,我看不懂才来问的.大神9我
}
}
public class test2 {
public static void main(String[] args) {
Calendar c = Calendar.getInstance();
int index1 = c.get(Calendar.MONTH);
System.out.println("现在是今年的第"+index1+1+"个月");
System.out.println("现在是今年的第"+Calendar.MONTH+1+"个月");//上面的是标准,该行是错的,
//我的问题是为什么直接用Calendar.MONTH是错的,这个Calendar类的get(~)方法内部是怎么实现
//的呀.实在想不明白.请大神别复制了源代码然后不给解释呐,我看不懂才来问的.大神9我
}
}
public static final int MONTH = 0; public static int get(int field) {
return 100;
}
}LZ觉得System.out.println(A.MONTH)和System.out.println(A.get(A.MONTH))是一样吗?
{
complete();
return internalGet(field);
} protected final int internalGet(int field)
{
return fields[field];
}可以看出Calendar.MONTH只是一个数组索引,而get方法返回的是数组里面的值,两者是不同的
既然永远打印的是2,那java凭什么通过c.get(Calendar.MONTH)能获得对应的月,那为什么用了c.get(Calendar.MONTH)能随着系统时间更改成改变成对应月了呢?
public static final int ERA = 0;
// Field descriptor #98 I
public static final int YEAR = 1;
// Field descriptor #98 I
public static final int MONTH = 2;
// Field descriptor #98 I
public static final int WEEK_OF_YEAR = 3;
// Field descriptor #98 I
public static final int WEEK_OF_MONTH = 4;
// Field descriptor #98 I
public static final int DATE = 5;
Calendar.MONTH 不是指现在是现在的月份 而是字段,当你传入Calendar.MONTH是,java将其转换成字段2 ,这说明你要取得是月份,然后从特定的数组中取出月份 ,所以不管几月份 Calendar.MONTH永远是2,相同的当你传入Calendar.YEAR,java转成1,java才去取年份