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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 郑强强 中级黑马   /  2012-4-8 08:15  /  2898 人查看  /  9 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文


class Person
{
        private String name;
        private int age;

     Person(String name)
     {
        name=name;
     }

}//这个会出错


class Person
{
        private String name;
        private int age;

     Person(String n)
     {
        name=n;
     }

}//这个正确
看视频有点迷惑了,  为什么一个正确,一个错误啊?
那this.name=name;其中this的name是成员变量吗?
毕老师这个地方把我讲晕了,求高手给详解

9 个回复

倒序浏览
this 表示当前对象, 使用this对象后,我指向的就是本类的成员变量,而没有指定this指定,那就
是方法中自己声明的局部变量
回复 使用道具 举报
楼上正解,this强调调用的是本类中的方法,除此之外this还有以下作用“
   表示类中的属性
   可以使用this调用本类的构造方法
   this表示当前对象
回复 使用道具 举报
是有点不好懂,我也是看了多遍才搞懂.
this有三种表示格式,就是三种用法:
1.单独使用的时候表示对当前对象的引用.
2.this.用于在成员变量和局部变量同名时区分,表示当前对象所在类的成员变量.你现在的这个this.name=name就是这样,加了this就是当前对象的name,不加就是Person这个构造函数的name,这种用法貌似比较多.
3.this(构造函数参数列表)用于在构造函数中调用其他满足参数列表的构造函数.其实就是表示其他满足类型的构造函数.只能用于构造函数间调用,只能调用一个并且写在构造函数第一行.
注意this不能用在static方法中.
回复 使用道具 举报
成员之间的访问都是由对象完成的,如果没有对象,他们之前是不存在访问的关系的。当类中出现name=name的时候,那么你在考虑哪个是成员变量,所以加了个this区分,这代表它是类中的成员变量,它接收你所赋给的值。当 Person(String name){name=name;}时如果不加以区分,就成了,自己给自己赋值,要相当于x=2;x=x;这样的情况了。而下面的name=n;不同是因为n接受调用者传进来的参数,再赋给了name没有相同的变量,所以是正确的。
回复 使用道具 举报
class Person
{
        private String name;
        private int age;

     Person(String name)
     {
        name=name;
     }

}//这个会出错,因为传入的变量名相同,这就有局部和成员变量同名,name=name虚拟机就根据就进原则,认为name都是局部的


class Person
{
        private String name;
        private int age;

     Person(String n)
     {
        name=n;
     }

}//这个正确,因为不同名,不会出现局部和成员同名的疑惑

this.用于在成员变量和局部变量同名时区分
回复 使用道具 举报
this是指的是当前调用这个方法的对象,你这个例子中Person类的成员变量和局部变量名相同时,所以就得在调用这个类的对象的成员变量name前加上引用表示区分,而你下面的构造方法的参数是n时,因为和类的成员变量没有同名的所以就可以直接写成 name=n; 上面的同名就只能写成 this.name = name;了
回复 使用道具 举报

   this代表它所在函数所属对象的引用
简单说: 哪个对象在调用this所在的函数,this 就代表哪个对象

class Person
{
        private String name;
        private int age;

     Person(String name)
     {
        name=name;  //改成 this.name=name  用于区分局部变量和成员变量重名的情况 .
     }

}//这个会出错


class Person
{
        private String name;
        private int age;

     Person(String n)
     {
        name=n;
     }

}//这个正确
回复 使用道具 举报
我记得老毕讲的很清楚啊,好像专门总结过this的,认真看视频吧~
回复 使用道具 举报
pray 高级黑马 2014-4-26 05:02:04
10#
叼!(虽然仅仅一个字,却生动的表达了回复人的不屑于洒脱,反映出作者性格中的冷漠和无奈,以一种打酱油的心情冷眼旁观这世界,足以反应作者被社会冷漠氛围的影响,也反应了河蟹社会人们从敢怒不敢言的心情逐渐转变成不愿言,不想言知道无话可言的一种悲哀,深深的反映出现在网络审查之严厉,跨省之可怕,最后以感叹号结尾,点睛之笔,将文章升华为一切归于不言中,一切又有谁敢言的境界,用最精炼且安全的文字,表达了大家内心深处的抗争
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马