0

次のコードでは、メソッドはクラスsetのフィールド値を変更します。CalendarフィールドYEARが宣言されてstatic int YEARいます。では、クラスの 2 つのオブジェクトを作成すること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));
4

2 に答える 2

6

Calendar.YEARによって使用されるフィールドに名前を付けるためにのみ使用される定数ですCalendar。そのフィールドのは静的ではありませんCalendar。インスタンス間で変化する可能性があり、変化します。

Calendarでは、日付と時刻のさまざまなコンポーネントに対してこれらのフィールド名をいくつか定義しています。具体的には、対応するフィールドの get 操作と set 操作で使用されます。

の javadoc のセクションは次のとおりですCalendar.YEAR

実装に関しては、 メソッドsetgetメソッドはこれらの異なるフィールド タイプを認識し、渡された定数に基づいてインスタンスの値を変更します。これは、すべてのフィールド値をオンにするorの大きなswitchステートメントのように考えてください。getset

于 2012-09-13T15:46:33.567 に答える
3

YEAR(およびその他の関連フィールド)は、Calendar必要なフィールドを伝えるために使用される単なる定数です。の値を見ると、実際には 1 の値であるYEARことがわかります。static final

個人の年は、Calendarご想像のとおり、最終的にCalendarオブジェクトに格納されます。定数は、実際の年の値YEARを求めるためにのみ使用されます。Calendar

于 2012-09-13T15:48:08.113 に答える