黑马程序员技术交流社区

标题: 【已解决】this关键字的用法 [打印本页]

作者: 王冬    时间: 2012-9-1 15:47
标题: 【已解决】this关键字的用法
本帖最后由 王冬 于 2012-9-1 20:10 编辑

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






作者: 郑义    时间: 2012-9-1 15:55
本帖最后由 郑义 于 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
作者: 王金科    时间: 2012-9-1 16:08
楼上正解
作者: AngieFans85    时间: 2012-9-1 16:19
1 thissass
作者: AngieFans85    时间: 2012-9-1 16:44
1 this代表当前对象.可以省略.
2 p.distance(this);是将当前对象作为参数传入p.distance()方法里.
作者: 王冬    时间: 2012-9-1 17:11
郑义 发表于 2012-9-1 15:55
第一个this是代表本实例,也就是调用本实例的distance(p)方法,这个是可以省略的。
第二个this也是代表本 ...

问题已解决,谢谢各位:lol




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2