Java:为什么静态字段是;“独立”;彼此

Java:为什么静态字段是;“独立”;彼此,java,static,field,Java,Static,Field,在以下代码中,set方法更改Calendar类的字段值。 字段YEAR被声明为static int YEAR。那么,为什么通过创建两个Calendar类的对象,一个对象的更改会反映到另一个对象?在这里,这种情况不会发生。 我想问一下Java开发人员是如何实现这一点的 Calendar calendar = new GregorianCalendar(); Calendar cal = new GregorianCalendar(2011,9,13); System.out.println(cal

在以下代码中,
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));

Calendar.YEAR
是一个常量,仅用于命名
日历使用的字段。该字段的值是而不是静态的:它可以并且将在
日历
的实例之间变化

Calendar
为日期和时间的不同部分定义了许多字段名,专门用于相应字段的get和set操作

javadoc中日历年的部分

至于实现,
set
get
方法知道这些不同的字段类型,并根据传入的常量更改实例中的值。把它想象成
get
set
中的一个大
switch
语句,打开所有字段值

YEAR
(以及其他相关字段)只是常量,用于告诉您的
日历
您想要哪个字段。如果查看
YEAR
的值,您将看到它实际上是
静态final


正如您所期望的那样,单个
日历
的年份最终存储在
日历
对象中,
常量仅用于询问
日历
的实际年份值。

那么,它是如何声明的呢?静态整数年..?
public static final int YEAR_FIELD
我看到了,但是静态日历字段YEAR和每个对象的内部字段之间的链接(在代码级别)是如何完成的?@sleax在本例中,编写了
Calendar.get
方法,以便它了解不同常量的用法。因此,当您调用
Calendar.get
时,它会查看传递的常量,例如,
YEAR
,并返回相应的值。因此在
get
方法中,有一个类似于带有所有可能的常量字段名的大型
switch
语句。与
日历相同。设置
方法