黑马程序员技术交流社区

标题: this和变量的小疑问 [打印本页]

作者: 郑强强    时间: 2012-4-8 08:15
标题: this和变量的小疑问

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是成员变量吗?
毕老师这个地方把我讲晕了,求高手给详解

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

作者: niceBoy    时间: 2012-4-8 10:11
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.用于在成员变量和局部变量同名时区分
作者: zhouxp3323    时间: 2012-4-8 13:03
this是指的是当前调用这个方法的对象,你这个例子中Person类的成员变量和局部变量名相同时,所以就得在调用这个类的对象的成员变量name前加上引用表示区分,而你下面的构造方法的参数是n时,因为和类的成员变量没有同名的所以就可以直接写成 name=n; 上面的同名就只能写成 this.name = name;了
作者: 文密    时间: 2012-4-8 13:15

   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;
     }

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




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