import java.util.Date;public class TestFinal {
public static void main(String[] args){
Test1 test = new Test1(2009,3,2);
System.out.println(test.getHireday());
test.reset();
System.out.println(test.getHireday());

}
}
class Test1{
private Date hireday;

public Test1(int year,int month,int day){
this.hireday = new Date(year,month,day);
} public Date getHireday() {
return hireday;
}    public void reset(){
     this.hireday.setDate(4);
    }
}大家觉得应该输出什么?
本来这个例子是我写来测试final最好不要用来修饰可变类的,如果Test1类中第一行写成private final Date hireday = new Date(); 则后面就不可以再对hireday进行初始化,系统会报错删除hireday终态,现在我把final删掉了,但是结果又不是我觉得应该是的结果,很奇怪,大家帮我看看吧。

解决方案 »

  1.   

    用的全是JDK不推荐使用的方法~
    输出肯定是2号 4号
    找个问题怎么会奇怪呢 你的date对象在reset后重设了日期为4输出2009年三月4号的日期字符串不奇怪吧
      

  2.   

    lz是不是因为输出的是4月的?
    我输出的是4月份的,因为在输出月份的时候都要减一,才能得到你原来的月份,在java里面,0代表1月份(就是开始月份),三月当你输入3的时候,就变成了4月了,呵呵
      

  3.   

    Fri Apr 02 00:00:00 CST 3909
    Sun Apr 04 00:00:00 CST 3909
    我的结果是这样的,后面显示的年怎么是3909呢?
      

  4.   

    楼主我教你怎么贴代码:
    1、将代码作良好的格式化,以方便阅读。
    2、在发帖文本框的上方单击“#”按钮,选择 Java
    3、将代码粘贴到【code=Java】和【/code】之间。就会得到下面的效果:public class Hello {    public static void main(String[] args) {
            System.out.println("Hello!");
        }
    }
      

  5.   

    因为你用的date是引用格林威治时间,是从1900年1月1日0时0分开始算的,所以你要减去1900年才可以。。
      

  6.   

    还有如果你想输出2009-3-2这样的格式,你用format格式化一下你的日期,有空看看api的Calendar吧,呵呵可以学到很多时间输出的知识的,呵呵。。lz加油