当前位置: 技术问答>java相关
this指针问题,分大大的给
来源: 互联网 发布时间:2015-03-17
本文导语: 兄弟俺有一问题百思不得其解,特此刊登,请众位高手,恳请您帮我缕个思路,分数每天都会加些,保证给分及时: 1 public class MyDate { 2 private int day=1; 3 public MyDate(int day) 4 {this.day=day;} 5 public MyDate(MyDa...
兄弟俺有一问题百思不得其解,特此刊登,请众位高手,恳请您帮我缕个思路,分数每天都会加些,保证给分及时:
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,2,1977);
MyDate the_next_day=birth.addDays(7);
the_next_day.print();
答案是:
8
1、为什么?
2、请问这几个this都是怎么工作的,代表什么?
3、还有程序第8行是怎么触发,什么流程?
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,2,1977);
MyDate the_next_day=birth.addDays(7);
the_next_day.print();
答案是:
8
1、为什么?
2、请问这几个this都是怎么工作的,代表什么?
3、还有程序第8行是怎么触发,什么流程?
|
最重要的是你要知道当前执行的函数(包括构造函数)是哪个对象的!this就是那个对象。
|
程序流程很清楚.关键是理解第8行.
MyDate new_date = new MyDate(this);
这里的this当然是和 new MyDate(1)是同一对象
MyDate new_date = new MyDate(this);
这里的this当然是和 new MyDate(1)是同一对象
|
首先感觉缺一个构造函数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.先构造了一个day是1得MyDate实例,然后day再加7,于是最后是8。
2.这里所有的this都是指实例本身。例如第8行的this就是指把本身这个MyDate实例作为参数传递到另一个MyDate的构造函数。
3.第8行的意思就是构造一个和本身一样的一个MyDate实例,然后把新对象的day加上参数more_days,最后返回更新过的新对象。
|
在这个程序中,如果你把所有的this.都去掉看看,你就明白了。
补充,java里面没有“指针”这个概念。
补充,java里面没有“指针”这个概念。
|
其实JAVA中的引用和this就相当于指针,只不过不能向C++中那样加减罢了。
|
同意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
|
gz
|
少一个构造MyDate(int day,int month,int year)
和charleyshen(shenpf)意见相同
和charleyshen(shenpf)意见相同
|
你是不是想用MyDate birth=new MyDate(1,2,1977)
去调用public MyDate(MyDate date)?
还是怎地?
去调用public MyDate(MyDate date)?
还是怎地?
|
指向当前对象嘛,在birth的方法内,指向Birth
在new_date的方法内,当然指向new_date了
在new_date的方法内,当然指向new_date了