黑马程序员技术交流社区
标题:
【LOOK!】this关键字是不是被取消了呢?这不是我想要的结果
[打印本页]
作者:
1017161726
时间:
2014-11-27 10:38
标题:
【LOOK!】this关键字是不是被取消了呢?这不是我想要的结果
毕老师的this关键字这块。。理论上来说,this.x=x 和x=x 是不一样的。但是执行的结果,没差别。
class Person
{
private String name;
private int age;
Person()
{
System.out.println("A:name="+name+" , age="+age);
}
Person(String name)
{
this.name=name;
//
这里把this.去掉,执行结果没有差异。不知道为什么,是java升级了把这个this关键字省略了?
System.out.println("B:name="+name+", age="+age);
}
Person(String name,int age)
{
this.name=name;
this.age=age;
System.out.println("C:name="+name+", age="+age);
}
}
class Demo
{
public static void main(String[] args)
{
Person p1=new Person();
Person p2=new Person("张三");
Person p3=new Person("李四",22);
}
}
捕获.PNG
(17.84 KB, 下载次数: 11)
下载附件
2014-11-27 10:35 上传
作者:
尚勇勇
时间:
2014-11-27 10:38
以下是正确答案,求仔细看,看完给分:
因为在类中定义了成员变量name和age,在Person(String name)构造方法中,定义了一个局部变量name
,而在这个局部变量中的代码如果写成 this.name=name,就是普通的成员变量赋值,如果写成
name=name,则两个name都属于Person(String name)这个构造方法中,与外面定义的成员变量没有任何关系,
有句话,就是方法自己有,绝不出去找
在构造方法中的输出语句System.out.println("B:name="+name+", age="+age); }
在new这个Person p2=new Person("张三");对象时将“张三”传给Person(String name)构造方法中的
局部变量name,所以输出语句中可以打出“张三”,而输出语句中的agePerson(String name)构造方法中
没有定义,就自己找到成员的age
作者:
冬天的雪
时间:
2014-11-27 14:35
因为name是我们Person这个类中的一个成员变量,而我们调用Person的构造方法时,左边的name就会直接引用我们的成员变量了,右边的name就直接接受参数。
作者:
juexinshi
时间:
2014-11-27 19:36
this关键词只可以于方法内部,表示“调用当前方法的对象”的引用。因此this的用法和其它的对象引用并无本质上的不同,只是在调用方法所在类的另外一个方法时不必要使用,对于所在类的域成员的访问理论上也是不需要this的,但是在方法参数名称和域成员名称一致时,可用this用来区分二者提高代码的可读性。(也有些人认为要形式化的将this放在所有的方法和域成员前,我感觉没必要如此,这样反而会增加代码的混乱程度)
综上,在这种情形下,不是this被取消了,而是“不是语法上强制使用,仅仅是为了增加可读性”
作者:
雨过山更翠
时间:
2014-11-27 20:32
你的方法中的输出语句 System.out.println("B:name="+name+", age="+age);其中name和age输出的都是局部变量的值,也就是创建对象时输入的参数“张三”等。
如果你换成 name = name, 你就没有把值赋给对象中的name,如果你把输入语句中的name换成this.name输出结果就是null
作者:
dong_xi_chao
时间:
2014-11-28 08:50
this关键词只可以于方法内部,表示“调用当前方法的对象”的引用。因此this的用法和其它的对象引用并无本质上的不同,只是在调用方法所在类的另外一个方法时不必要使用,对于所在类的域成员的访问理论上也是不需要this的,但是在方法参数名称和域成员名称一致时,可用this用来区分二者提高代码的可读性。
作者:
1017161726
时间:
2014-11-28 10:06
嗯,了解了。this不是被取消了,而是这里可以不写。
作者:
jdedffjef83j
时间:
2014-11-30 20:32
学习了,this
作者:
lwh316658735
时间:
2014-12-8 15:12
你那样写语法上是没错误的,但是是功能性错误。赋值错误
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2