首先感觉缺一个构造函数MyDate(int day,int month,int year)
1.先构造了一个day是1得MyDate实例,然后day再加7,于是最后是8。
2.这里所有的this都是指实例本身。例如第8行的this就是指把本身这个MyDate实例作为参数传递到另一个MyDate的构造函数。
3.第8行的意思就是构造一个和本身一样的一个MyDate实例,然后把新对象的day加上参数more_days,最后返回更新过的新对象。

解决方案 »

  1.   

    在这个程序中,如果你把所有的this.都去掉看看,你就明白了。补充,java里面没有“指针”这个概念。
      

  2.   

    其实JAVA中的引用和this就相当于指针,只不过不能向C++中那样加减罢了。
      

  3.   

    同意charleyshen的意见,程序的确缺少了一个构造函数,由 MyDate birth=new MyDate(1,2,1977);使得birth的private变量day的值为1,第二句 MyDate the_next_day=birth.addDays(7); 调用addDays()方法,所以第八行的this指向birth,所以第八行的作用就好比于new_date.day=birth.day,即new_date.day=1,相加后自然=8
      

  4.   

    少一个构造MyDate(int day,int month,int year)
    和charleyshen(shenpf)意见相同
      

  5.   

    MyDate birth=new MyDate(1,2,1977)写错了,应该是MyDate birth=new MyDate(1);
      

  6.   

    MyDate birth=new MyDate(1); 
    调用第3行的构造函数public MyDate(int day)
    这样birth就是一个MyDate对象,birth.day = 1;birth.addDays(7);
    调用第7行birth对象的函数addDays(int more_days)
    第8行的this是指birth,
    调用第5行MyDate(MyDate date)//即MyDate(birth)
    执行第6行,this是指new_date对象。这样,new_date.day=birth.day=1。
    执行第9行,new_date.day=1+7=8。
    第10行返回new_date对象,将new_date对象符给the_next_day,the_next_day.day=8
    所以打印出来的是8。流程:
    MyDate birth=new MyDate(1);
    3
    4
    MyDate the_next_day=birth.addDays(7);
    7
    8
    9
    10
    the_next_day.print();
    11
    12
    13
      

  7.   

    你是不是想用MyDate birth=new MyDate(1,2,1977)
    去调用public MyDate(MyDate date)?
    还是怎地?
      

  8.   

    leizhengdeng(E-农民),第8行的this指向birth可以理解,但为什么第六行的this指向new_date???请给与解答,多谢了!
      

  9.   

    指向当前对象嘛,在birth的方法内,指向Birth
    在new_date的方法内,当然指向new_date了
      

  10.   

    我把你的程序编译了一下,出现以下错误
    symbol  : constructor MyDate  (int,int,int)
    location: class MyDate
            MyDate birth=new MyDate(1,2,1977);
    很明显缺少MyDate(int,int,int)这样的构造函数.所以我不明白你的问题到底是什么
      

  11.   

    typet1998(),我说过了,我打错了,应该是:
    我那个例子是有年月日的构造器,但我为了简单,删掉了月和年,又不小心忘记了改实例代码,
    “MyDate birth=new MyDate(1,2,1977)写错了,应该是MyDate birth=new MyDate(1); ”
      

  12.   

    程序流程很清楚.关键是理解第8行.
    MyDate new_date = new MyDate(this);
    这里的this当然是和 new MyDate(1)是同一对象
      

  13.   

    大概明白了一些。
    sunni(),leizhengdeng(E-农民):
    你们的意思是:
    比如当:obj a=new obj(b)
    a,b分别为obj的两个实例,在进入obj的构造函数时,this指针是指向a的,而不是指向b的,对吧?
      

  14.   

    mail_dcb2,你最后的理解还是有点偏差.
    "比如当:obj a=new obj(b)
    a,b分别为obj的两个实例,在进入obj的构造函数时,this指针是指向a的,而不是指向b的,对吧?
    "
    不能这样理解.因为MyDate new Date = new MyDate(this)是在MyDate类的方法中所以this指向类自己
      

  15.   

    typet1998():
    我越来越糊涂了
    在第8行:MyDate new_date=new MyDate(this);这个this是指向birth的,对吧,
    因此,调用第5行的构造器
    5  public MyDate(MyDate date)
    6  {this.day=date.day;}
    第六行的date肯定是指向birth的了,但按照你那么说,this指向了new_date又是怎么解释呢?
      

  16.   

    比如当:obj a=new obj(b)
    a,b分别为obj的两个实例,在进入obj的构造函数时,this指针是指向a的,而不是指向b的,对吧是可以这样理解的!!!!!!!!!!
    记住!this就是对象本身。leizhengdeng(E-农民),第8行的this指向birth可以理解,但为什么第六行的this指向new_date???请给与解答,多谢了! 8  {MyDate new_date=new MyDate(this);
    请看,这里我们要产生新的对象-new_date,于是就要调用它的构造函数。
    即第5行MyDate(MyDate date),注意这是给new_date对象进行初始化,第5行你可以理解为
    new_date.MyDate(MyDate date);
    这样,第6行的this就是new_date了。//this就是对象本身。这时的对象就是new_date了。应该明白了吧!,记住!this就是对象本身。
      

  17.   

    “在第8行:MyDate new_date=new MyDate(this);这个this是指向birth的,对吧,
    因此,调用第5行的构造器
    5  public MyDate(MyDate date)
    6  {this.day=date.day;}
    第六行的date肯定是指向birth的了,但按照你那么说,this指向了new_date又是怎么解释呢?”我再补充一下, 第8行的目的是为new_date初始化,就应该调用它的构造函数,因此,所调用的
    构造函数中的this就是new_date,因为是new_date构造函数嘛!
    再不懂,我打死你!不要看别人怎么说,你只要看我写的!
      

  18.   

    leizhengdeng(E-农民),呵呵,真心的谢谢你的帮助!
    对于this,我是不是可以简单的理解成:系统的唯一引用变量,在构造对象时分配。分配的方法是,给谁构造就指向谁对吧下面我总结一下整个过程,一则请包括leizhengdeng(E-农民),typet1998(),sunni()的各位高手挑挑其中我理解的错误,二则也让和我一样的初学者了解一下这个this指针。我在给这个帖子加到100分时开始散分,回复者均有分。
      

  19.   

    程式代码:
    1 public class MyDate {
    2  private int day=1;
    3  public MyDate(int day)
    4  {this.day=day;}
    5  public MyDate(MyDate date)
    6  {this.day=date.day;}
    7  public MyDate addDays(int more_days)
    8  {MyDate new_date=new MyDate(this);
    9    new_date.day=new_date.day+more_days;
    10  return new_date;}
    11 public void print()
    12  {System.out.println("MyDate: "+day);}
    13 }
    调用时
    MyDate birth=new MyDate(1);
    MyDate the_next_day=birth.addDays(7);
    the_next_day.print();1、首先初始化birth实例,进入第3行的构造器,由于是为birth对象初始化,所以this指向birth对象,第4行的
    实际作用即:birth.day=私有变量day=1;
    2、其次调用birth对象的addDays方法,由于此时this指针未被替换,所以仍指向birth,所以第8行的this为birth;
    3、第8行初始化new_date对象,所以this被替换成指向new_date;
    4、调用第5行的构造器,传入参数为birth对象,date对象指向birth;
    5、此时程序第6行实际意义为:new_date.day=birth.day=1;接下来的流程大家就都可以理解了
      

  20.   

    leizhengdeng(E-农民),你的QQ是多少,我的QQ是492795,收个徒弟如何?
      

  21.   

    “系统的唯一引用变量“???
    你可以这样理解,this 是类中的一个private对象,但你看不见它,在类对象构造时在其内部对
    其初始化,并指向该对象。总之,每个对象都有this指针(java中不提倡这么说,c++中是指针)。
    你的理解大概行了。
    qq在我们公司不让用。我的E-mail:[email protected]
    我用c++由6年了,但学java时间不长,所以没有资格做你师傅,有问题欢迎讨论。
      

  22.   

    "你可以这样理解,this 是类中的一个private对象,但你看不见它"
    ->
    "你可以这样理解,this 是类中的一个private变量,但你看不见它"
      

  23.   

    leizhengdeng(E-农民),原来是这么回事,不过我又有问题了,呵呵,不要嫌我弱智,也不要打我哦:既然this是类的private变量,不是系统中唯一的一个值,那么如何说第8行的this是birth的private变量,而第6行的this是new_date的变量呢???
      

  24.   

    把this看成对象的一个private变量,这只是一种理解的方法:第8行的this是birth的private变量的原因见第7行public MyDate addDays(int more_days)
    而第7行就是birth.addDays(7);你可以这样理解:
    7         birth.addDays(7);
    //系统内  this = birth;这只是一种理解的方法
    8         MyDate new_date=new MyDate(this);//所以这时的this是birth;第8行将调用第5行public MyDate(MyDate date)来构造new_date对象:所以第5行就是
    new_date.MyDate(birth):
    5         new_date.MyDate(MyDate date);//date=birth
    //系统内  this = new_date;
    6         this.day=date.day;//所以这时的this是new_date,相当
                                //于new_date.day=birth.day。
    最重要的是你要知道当前执行的函数是哪个对象的!this就是那个对象。
      

  25.   

    最重要的是你要知道当前执行的函数(包括构造函数)是哪个对象的!this就是那个对象。
      

  26.   

    明白了,两点经验:给谁构造就指向谁,当前执行的函数(包括构造函数)是哪个对象的!this就是那个对象;呵呵!
      

  27.   

    to leizhengdeng(E-农民):
        我也要感谢你!