在以下代码中,set
方法更改Calendar
类的字段值。
字段YEAR
已声明为static int YEAR
。那么为什么通过创建Calendar
类的两个对象,对一个对象的更改将反映到另一个对象?这不会发生。
我会问你Java开发人员是如何实现这个的?
Calendar calendar = new GregorianCalendar();
Calendar cal = new GregorianCalendar(2011,9,13);
System.out.println(calendar.get(Calendar.YEAR));
System.out.println(cal.get(Calendar.YEAR));
答案 0 :(得分:6)
Calendar.YEAR
是一个常量,仅用于名称 Calendar
使用的字段。该字段的值为非静态:它可以并且会因Calendar
的实例而异。
Calendar
为日期和时间的不同组件定义了许多这些字段名称,特别是用于相应字段的get和set操作。
Here's Calendar.YEAR
的javadoc部分。
至于实现,set
和get
方法知道这些不同的字段类型,并根据传入的常量更改实例中的值。可以把它想象成一个大的{{在switch
或get
中的1}}语句,切换所有字段值。
答案 1 :(得分:3)
YEAR
(以及其他相关字段)只是用于告诉您Calendar
所需字段的常量。如果您查看YEAR
的值,您会发现它实际上是static final
with a value of 1。
个人Calendar
的年份最终存储在Calendar
个对象中,正如您所期望的那样,YEAR
常量仅用于询问Calendar
它的实际年份值。