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

时间:2012-09-13 15:44:47

标签: 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(calendar.get(Calendar.YEAR));
System.out.println(cal.get(Calendar.YEAR));

2 个答案:

答案 0 :(得分:6)

Calendar.YEAR是一个常量,仅用于名称 Calendar使用的字段。该字段的静态:它可以并且会因Calendar的实例而异。

Calendar为日期和时间的不同组件定义了许多这些字段名称,特别是用于相应字段的get和set操作。

Here's Calendar.YEAR的javadoc部分。

至于实现,setget方法知道这些不同的字段类型,并根据传入的常量更改实例中的值。可以把它想象成一个大的{{在switchget中的1}}语句,切换所有字段值。

答案 1 :(得分:3)

YEAR(以及其他相关字段)只是用于告诉您Calendar所需字段的常量。如果您查看YEAR的值,您会发现它实际上是static final with a value of 1

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

相关问题