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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 遮天 中级黑马   /  2014-6-12 16:18  /  1734 人查看  /  10 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 遮天 于 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. 以上两种写法都可以,但是有什么区别呢?
复制代码

10 个回复

倒序浏览
这里没什么区别,这里的this主要是区分你函数中的参数命名与类中变量名,防止混淆。例如:
  1. Person(String name, int age)
  2. {
  3.         name = name;
  4.         age = age;
  5. }
复制代码

这样的话你会看的懂这句话是什么意思吗?
如果你加了this的话,就知道,哦,这是实例中的变量名,而不是函数中的参数。

评分

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

查看全部评分

回复 使用道具 举报
嗯,嗯,它们俩本质上没有什么区别,是一样的,只是个代码编写习惯与规范问题。
this表示本类中,区分传进这个类的参数与本类中变量名相同的参数名。但一般不写this也没有什么影响,只是你看着分不清而已,不利于代码的可读性。如果就是不写this,但还是为了提高点可读性,就把名字取成不一样的,但同时,还是不利于理解程序,因为你不知道你传进来的那个东东是要给谁,如果名字一样,你一定就知道,那个东东是要给谁了。name给name,age给age。
回复 使用道具 举报
  • Person(String name, int age)
  • {
  •         this.name = name;
  •         this.age = age;
  • }
  • 和这种写法
  • Person(String name, int age)
  • {
  •         name = name;
  •         age = age;
  • }
  • 你看上面两个有什么区别,是不是第二个不知道哪个是对象的name,哪个是参数的name
  • 所以用this指定一下,就更加清晰明白

回复 使用道具 举报
如果参数跟类中的成员变量相同,为了避免混乱在参数前加this可以辨别
回复 使用道具 举报
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;

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


希望我的回答,你还算满意!
回复 使用道具 举报
楼上回答得很清楚!
回复 使用道具 举报
你的形参跟成员变量一样了就需要this  如果不一样就不需要用啊
回复 使用道具 举报
遮天 中级黑马 2014-6-12 18:43:14
9#
不去会死 发表于 2014-6-12 18:36
你的形参跟成员变量一样了就需要this  如果不一样就不需要用啊

简单得体,懂了,谢谢..........
回复 使用道具 举报
代码可读性很重要的
回复 使用道具 举报
没什么区别,但是再程序中,需要做到的是尽量见名知意,所以才将写成name与age。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马