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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 王冬 中级黑马   /  2012-9-1 15:47  /  2048 人查看  /  5 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 王冬 于 2012-9-1 20:10 编辑

见到一个Point类的设计,有两个问题:1、第21行中的this有什么作用?是不是可以省略?2、在第25行中,this这种用法该如何使用?{:soso_e132:}





评分

参与人数 1技术分 +1 收起 理由
田建 + 1

查看全部评分

5 个回复

倒序浏览
本帖最后由 郑义 于 2012-9-1 16:19 编辑

第一个this是代表本实例,也就是调用本实例的distance(p)方法,这个是可以省略的。
第二个this也是代表本实例,只不过此时的this是代表一个参数传入而已。
因为你的函数在定义中已经指定传入的参数是一个Point类的对象——distance(Point p)。
而此时的this正式代表本Point类的一个对象,所以作为参数传递进去,但是此时这个this不能够省略。
  1. class Point
  2. {
  3. private int x,y;
  4. public Point(int x,int y)
  5. {
  6. this.x = x;
  7. this.y = y;
  8. }
  9. public double distance(Point p)
  10. {
  11. return Math.sqrt((x-p.x)*(x-p.x)+(y-p.y)*(y-p.y));
  12. }
  13. public double distance3(Point p)
  14. {
  15. return p.distance(this);
  16. }
  17. }
  18. public class Test2
  19. {
  20. public static void main(String[] args)
  21. {
  22. Point p1 = new Point(3,5);
  23. Point p2 = new Point(4,6);
  24. double r = p2.distance3(p1);
  25. double r1 = p1.distance(p2);
  26. System.out.println(r==r1);
  27. }
  28. }
复制代码
通过结果发现r和r1的结果是相同的。
即p2.distance3(p1)=p1.distance(p2)。
this就是代表当前调用这个函数的对象,如果p2.distance3(p1),则this就代表p2

评分

参与人数 1技术分 +1 收起 理由
田建 + 1

查看全部评分

回复 使用道具 举报
楼上正解
回复 使用道具 举报
1 thissass
回复 使用道具 举报
1 this代表当前对象.可以省略.
2 p.distance(this);是将当前对象作为参数传入p.distance()方法里.
回复 使用道具 举报
郑义 发表于 2012-9-1 15:55
第一个this是代表本实例,也就是调用本实例的distance(p)方法,这个是可以省略的。
第二个this也是代表本 ...

问题已解决,谢谢各位:lol
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马