不影响Java Calendar类中其他对象的静态变量
既然Java中的不影响Java Calendar类中其他对象的静态变量,java,date,object,static,calendar,Java,Date,Object,Static,Calendar,既然Java中的Calendar类有静态数据字段,比如DATE,为什么在修改静态字段时其他对象不改变呢? 我制作了两个不同的格里高利日历,并认为静态数据字段改变了所有对象的值,而不是一个 import java.util.Calendar; import java.util.GregorianCalendar; public class TEST { public static void main(String[] args) { GregorianCalendar
Calendar
类有静态数据字段,比如DATE
,为什么在修改静态字段时其他对象不改变呢?
我制作了两个不同的格里高利日历,并认为静态数据字段改变了所有对象的值,而不是一个
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));
}
}
不是一个静态字段,它是一个静态变量,用于引用要在特定的日历实例中设置/获取的值类型
如果您查看,您将看到它有一个内部int
数组,该数组保存所有值,即日、月、年等
Calendar.DATE
只是引用该数组第五个元素的一种好方法
Java8源代码中的成员声明
/**
* 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;
不是一个静态字段,它是一个静态变量,用于引用要在特定的日历实例中设置/获取的值类型
如果您查看,您将看到它有一个内部int
数组,该数组保存所有值,即日、月、年等
Calendar.DATE
只是引用该数组第五个元素的一种好方法
Java8源代码中的成员声明
/**
* 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;
罗夏的答案是正确的,应该被接受
此外,您正在使用旧的日期-时间类,这些类被证明设计糟糕、容易混淆且麻烦。避开它们。它们已被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 ) );
罗夏的答案是正确的,应该被接受
此外,您正在使用旧的日期-时间类,这些类被证明设计糟糕、容易混淆且麻烦。避开它们。它们已被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 ) );
日历。日期也是最终日期,不能更改。它只是用来指示set
应该更改cal2
的日期。请在编写问题及其标题时更加小心和努力。标题应该狭义地描述手头的核心问题。另外,你想对呼叫set
传递45
做什么?我刚刚做了一个账户,已经习惯了整个提问问题,对此表示抱歉。其实没什么,我只是在没有考虑的情况下随意输入了一个数字,我只是想把日历日期设置成其他的日期@BasilBourque@Oswald不需要道歉。只需点击“编辑”链接/按钮并修复标题和标题。这些问题和答案是为子孙后代准备的,所以请一定要把它整理好。堆栈溢出更像是维基百科,而不是临时邮件列表讨论。calendar.DATE
也是final
,无法更改。它只是用来指示set
应该更改cal2
的日期。请在编写问题及其标题时更加小心和努力。标题应该狭义地描述手头的核心问题。另外,你想对呼叫set
传递45
做什么?我刚刚做了一个账户,已经习惯了整个提问问题,对此表示抱歉。其实没什么,我只是在没有考虑的情况下随意输入了一个数字,我只是想把日历日期设置成其他的日期@BasilBourque@Oswald不需要道歉。只需点击“编辑”链接/按钮并修复标题和标题。这些问题和答案是为子孙后代准备的,所以请一定要把它整理好。堆栈溢出更像是Wikipedia,而不是暂时的邮件列表讨论。