A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 邓超军 中级黑马   /  2012-7-16 11:50  /  1478 人查看  /  3 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 邓超军 于 2012-7-17 18:13 编辑
  1. class Employee
  2. {
  3.         private Date hireDay;
  4.         public Date getHireDay()
  5.         {
  6.                 //return hireDay; 为什么这句是错误的?或者说为什么不要这么写?
  7.                 return (Date)hireDay.clone();//和return hireDay有什么区别?
  8.         }
  9. }
复制代码

评分

参与人数 1技术分 +1 收起 理由
韦念欣 + 1 赞一个!

查看全部评分

3 个回复

正序浏览
实在抱歉,return hireDay;这个语句没有错,是我提问错了。今天我弄了4个小时,终于明白了,这句语句是没有错,但存在bug,请看以下代码,就会明白。
代码1:
  1. import java.util.*;
  2. public class EmployeeDemo {
  3.         public static void main(String[] args) {
  4.          Employee ep=new Employee(2011,9,18);
  5.          Date dt=ep.getHireDay();
  6.          System.out.println(ep.getHireDay());
  7.          double te=10*365.25*24*60*60*1000;
  8.          dt.setTime(dt.getTime()+(long)te);
  9.          System.out.println(ep.getHireDay());
  10.         }

  11. }

  12. class Employee
  13. {
  14.         private Date hireDay;
  15.         public Date getHireDay()
  16.         {
  17.                 return hireDay;
  18.         }
  19.         Employee(int year,int month,int day)
  20.         {
  21.                 GregorianCalendar gc=new GregorianCalendar(year,month-1,day);
  22.                 hireDay=gc.getTime();
  23.         }
  24. }
复制代码
运行结果:
Sun Sep 18 00:00:00 CST 2011
Fri   Sep 17 12:00:00 CST 2021

代码2:
  1. import java.util.*;
  2. public class EmployeeDemo {
  3.         public static void main(String[] args) {
  4.          Employee ep=new Employee(2011,9,18);
  5.          Date dt=ep.getHireDay();
  6.          System.out.println(ep.getHireDay());
  7.          double te=10*365.25*24*60*60*1000;
  8.          dt.setTime(dt.getTime()+(long)te);
  9.          System.out.println(ep.getHireDay());
  10.         }

  11. }

  12. class Employee
  13. {
  14.         private Date hireDay;
  15.         public Date getHireDay()
  16.         {
  17.                 return (Date)hireDay.clone();
  18.         }
  19.         Employee(int year,int month,int day)
  20.         {
  21.                 GregorianCalendar gc=new GregorianCalendar(year,month-1,day);
  22.                 hireDay=gc.getTime();
  23.         }
  24. }
复制代码
运行结果:
Sun Sep 18 00:00:00 CST 2011
Sun Sep 18 00:00:00 CST 2011
回复 使用道具 举报
本帖最后由 刘馨琪 于 2012-7-16 12:31 编辑

return hireDay;
楼主确定这句话有错吗?
我运行时这句话对,反而是return (Date)hireDay.clone();报错了。
报的 java.lang.NullPointerException,空指针异常。
回复 使用道具 举报
你确定这样能执行?
class Employee

{

        private Date hireDay;

        public Date getHireDay()

        {

                //return hireDay;    private Date hireDay。这个语句只是声明了hireDay是个Date类型的变量,而没有实例化。
                return (Date)hireDay.clone();//和return hireDay有什么区别? 这样对吗?hireDay还没有实例化,你就用了clone方法,而且clone()放回的是Object类型的副本,当然需要强转。
        }

}

点评

同意  发表于 2012-7-16 12:45

评分

参与人数 1技术分 +1 收起 理由
韦念欣 + 1 赞一个!

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马