2016-09-04 2 views
0

Java의 Calendar 클래스에 DATE과 같은 정적 데이터 필드가 있으므로 정적 필드가 수정 될 때 다른 객체가 변경되지 않는 이유는 무엇입니까? 두 개의 다른 그레고리력을 만들었으며 정적 데이터 필드가 모든 개체의 값 대신 하나의 값을 변경한다고 생각했습니다.정적 변수가 Java Calendar 클래스의 다른 객체에 영향을 미치지 않음

import java.util.Calendar; 
import java.util.GregorianCalendar; 

public class TEST { 
    public static void main(String[] args) { 

     GregorianCalendar cal = new GregorianCalendar(); 

     System.out.println(cal.get(Calendar.DATE)); 

     GregorianCalendar cal2 = new GregorianCalendar(); 

     cal2.set(Calendar.DATE, 12); 

     System.out.println(cal2.get(Calendar.DATE)); 
     System.out.println(cal.get(Calendar.DATE)); 

    } 
} 
+1

는'Calender.DATE'도'final'이며 변경 될 수 없습니다. 이것은'cal2'의 날짜가 변경되어야 함을'set'하도록 지시하는데 사용됩니다. –

+0

질문과 제목을 쓰는 데 더 많은주의와 노력을 기울이십시오. 제목은 간략하게 핵심 문제를 간략하게 설명해야합니다. 또한,'set'을 '45 '라고 부르는 호출로 무엇을하려고합니까? –

+0

나는 방금 계정을 만들었으며, 묻는 질문에 익숙해 져서 죄송합니다. 그리고 실제로 아무 것도 생각하지 않고서도 난수를 던졌습니다. 나는 그저 달력 날짜를 다른 것으로 설정하려고했습니다. @BasilBourque – Oswald

답변

2

Calendar.DATE은 당신이 설정/특정 Calendar 인스턴스에서 얻고 싶은 값의 유형을 참조하는 데 사용되는 정적 변수, 정적 필드 아니다.

당신이 actual source code of java.util.Calendar 보면 당신이

Calendar.DATE 다섯 번째 요소를 참조 단지 좋은 방법입니다 모든 값, 즉 년, 월, 일 등을 보유하고 내부 int 배열을 가지고있는 것을 볼 것입니다 그 배열의.


Java 8 소스 코드의 멤버 선언.

/** 
* Field number for <code>get</code> and <code>set</code> indicating the 
* day of the month. This is a synonym for <code>DAY_OF_MONTH</code>. 
* The first day of the month has value 1. 
* 
* @see #DAY_OF_MONTH 
*/ 
public final static int DATE = 5; 
0

답변은 rorschach가 정확하며 받아 들여야합니다.

또한 잘못 설계되고 혼란스럽고 번거로운 것으로 입증 된 이전 날짜 시간 클래스를 사용하고 있습니다. 그들을 피하십시오. 이것들은 java.time 클래스에 의해 대체되었습니다.

LocalDate today = LocalDate.now(ZoneId.of("America/Montreal")); 
LocalDate nextWeek = today.plusWeeks(1); 
LocalDate midMonth = today.withDayOfMonth(15); 
LocalDate firstOfMonth = today.with(TemporalAdjusters.firstDayOfMonth()); 
LocalDate secondTuesdayOfThisMonth = today.with(TemporalAdjusters.dayOfWeekInMonth(2 , DayOfWeek.TUESDAY)); 
관련 문제