黑马程序员技术交流社区

标题: this问题 [打印本页]

作者: 遮天    时间: 2014-6-12 16:18
标题: this问题
本帖最后由 遮天 于 2014-6-13 17:27 编辑
  1. /*

  2.         构造函数

  3. */

  4. class Person
  5. {
  6.         String name;
  7.         int age;

  8.         Person(String name, int age)
  9.         {
  10.                 this.name = name;
  11.                 this.age = age;
  12.         }

  13.         void speck()
  14.         {
  15.                 System.out.println("姓名:"+name+"______年龄:"+age);
  16.         }
  17. }

  18. class Demo
  19. {
  20.         public static void main(String[] args)
  21.         {
  22.                 Person p = new Person("脚本小子", 22);
  23.                 p.speck();
  24.         }
  25. }


  26. 问题:在Person类的构造函数中
  27. 这种写法
  28. Person(String name, int age)
  29. {
  30.         this.name = name;
  31.         this.age = age;
  32. }

  33. 和这种写法
  34. Person(String n, int a)
  35. {
  36.         name = n;
  37.         age = a;
  38. }

  39. 以上两种写法都可以,但是有什么区别呢?
复制代码

作者: yanghu    时间: 2014-6-12 17:08
这里没什么区别,这里的this主要是区分你函数中的参数命名与类中变量名,防止混淆。例如:
  1. Person(String name, int age)
  2. {
  3.         name = name;
  4.         age = age;
  5. }
复制代码

这样的话你会看的懂这句话是什么意思吗?
如果你加了this的话,就知道,哦,这是实例中的变量名,而不是函数中的参数。
作者: Crystal静新    时间: 2014-6-12 17:14
嗯,嗯,它们俩本质上没有什么区别,是一样的,只是个代码编写习惯与规范问题。
this表示本类中,区分传进这个类的参数与本类中变量名相同的参数名。但一般不写this也没有什么影响,只是你看着分不清而已,不利于代码的可读性。如果就是不写this,但还是为了提高点可读性,就把名字取成不一样的,但同时,还是不利于理解程序,因为你不知道你传进来的那个东东是要给谁,如果名字一样,你一定就知道,那个东东是要给谁了。name给name,age给age。
作者: 姿_`态    时间: 2014-6-12 17:20


作者: 790324255a    时间: 2014-6-12 17:56
如果参数跟类中的成员变量相同,为了避免混乱在参数前加this可以辨别
作者: yi岁⑨很乖❤    时间: 2014-6-12 17:58
Person(String name, int age)
{
        this.name = name;
        this.age = age;
}

此构造函数使用了this, this表示的是本类对象,就是Person类。
this.name = name 这句话的意思是,将局部变量(参数的变量)name赋值给成员变量的name。
因为局部变量和成员变量重名了,就引入了this。在这里可以用来区分变量名。

Person(String n, int a)
{
        name = n;
        age = a;
}

此构造函数的参数的变量名和成员变量并不重名,其实他也省略了this,但是因为变量名不重名,
所以可以省略:this.name = n;

但是往往在写写程序的时候,往往会写第一种。因为变量名统一,可以有利于代码的阅读性,
而且定义过多其他变量名,会导致代码看上去非常不整洁。


希望我的回答,你还算满意!
作者: 黄宝宝    时间: 2014-6-12 18:03
楼上回答得很清楚!
作者: 不去会死    时间: 2014-6-12 18:36
你的形参跟成员变量一样了就需要this  如果不一样就不需要用啊
作者: 遮天    时间: 2014-6-12 18:43
不去会死 发表于 2014-6-12 18:36
你的形参跟成员变量一样了就需要this  如果不一样就不需要用啊

简单得体,懂了,谢谢..........
作者: liujie445012100    时间: 2014-6-12 20:50
代码可读性很重要的
作者: MR.Sun    时间: 2014-10-8 10:00
没什么区别,但是再程序中,需要做到的是尽量见名知意,所以才将写成name与age。




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