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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 孔德智 中级黑马   /  2012-9-2 13:50  /  2062 人查看  /  6 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 孔德智 于 2012-9-2 20:34 编辑

class Person
{     Person(String  name)
     {this.name=name;
      }

这种代码有什么用?this其他有什么用法吗?

6 个回复

倒序浏览
class Point
{
private int x,y;
public Point(int x,int y)
{
this.x = x;
this.y = y;
}
public double distance(Point p)
{
return Math.sqrt((x-p.x)*(x-p.x)+(y-p.y)*(y-p.y));
}
public double distance3(Point p)
{
return p.distance(this);
}
}
public class Test2
{
public static void main(String[] args)
{
Point p1 = new Point(3,5);
Point p2 = new Point(4,6);
double r = p2.distance3(p1);
double r1 = p1.distance(p2);
System.out.println(r==r1);
}
}

蓝色的this是代表本实例,也就是调用本实例的distance(p)方法,这个是可以省略的。
红色的this也是代表本实例,只不过此时的this是代表一个参数传入而已。
因为你的函数在定义中已经指定传入的参数是一个Point类的对象——distance(Point p)。
而此时的this正式代表本Point类的一个对象,所以作为参数传递进去,但是此时这个this不能够省略。
通过结果发现r和r1的结果是相同的。
即p2.distance3(p1)=p1.distance(p2)。
this就是代表当前调用这个函数的对象,如果p2.distance3(p1),则this就代表p2
回复 使用道具 举报
这段代码的意思是在Person类中提供了一个Person方法(功能)

this看上去,用于区分局部变量和成员变量同名的情况
this为什么可以解决这个问题?
this:代表什么
this代表本类对象,到底代表那一个呢
this代表它所在函数所属对象的引用
哪个对象在调用函数,this就代表哪个对象
this的应用:当定义类中功能时,该函数内部要用到调用该函数的对象时,这时用this表示这个对象
但凡本类功能内部使用了本类对象,用this来表示
回复 使用道具 举报
本帖最后由 魏-玉-彪 于 2012-9-2 19:47 编辑

  1. class Person
  2. {   


  3.   Person(String  name)
  4.      {this.name=name;
  5.       }

复制代码
这个代码没有用,因为class Person 中没有定义名为name 的成员变量或者常量,而且这个类也没有继承含有这个成员的类,所以没有任何意义,有可能会出异常。

你的意思可能是

class Person
{   
String  name;
Person(String  name)
     {this.name=name;
      }




后面这个代码,红色部分是类成员
蓝色部分是有参构造函数

当 Person p= new Person("字符串");
也就是创建一个 名为p的 Person对象时是这样的

Person("字符串")
     {this.name="字符串";
      }
把构造函数中的值赋给了new出来的对象。这里指的是p.
得到的结果是:

(Person )p
{   

  String  name="字符串";
  //Person(String  name)
    //{this.name=name;
      //}


简单的说,this.代表的是new创建的那个实际的、实例化的Person对象,这个对象通常有名字,有时也没名字,没名字是就是匿名对象,这段代码用来为新创建的对象进行初始化,也就是,把Person(String  name) 这个构造方法中的  name值传给新创建的对象,以达到创建指定参数的Person对象的目的。












回复 使用道具 举报
魏-玉-彪 发表于 2012-9-2 19:40
这个代码没有用,因为class Person 中没有定义名为name 的成员变量或者常量,而且这个类也没有继承含有这个 ...

嗯,回答的很好,谢谢
回复 使用道具 举报
冰舞世界 发表于 2012-9-2 15:04
这段代码的意思是在Person类中提供了一个Person方法(功能)

this看上去,用于区分局部变量和成员变量同名 ...

回答很好,谢谢
回复 使用道具 举报
郑义 发表于 2012-9-2 14:06
class Point
{
private int x,y;

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