黑马程序员技术交流社区
标题:
这个程序中三个那么的区别,如果没有this,为什么打印出来的结果为null?
[打印本页]
作者:
刘丰伟
时间:
2012-12-10 16:40
标题:
这个程序中三个那么的区别,如果没有this,为什么打印出来的结果为null?
public static void main(String[] args) {
// TODO Auto-generated method stub
Person s=new Person ("lisi");
s.speak();
}
}
class Person
{
private String name;
Person (String name)
{
this.name=name;
}
void speak()
{
System.out.println("name="+name);
}
}
作者:
翁鹏
时间:
2012-12-10 16:48
本帖最后由 翁鹏 于 2012-12-10 16:53 编辑
(如果没有this)
你就没有为Person类中的实例变量name赋值,this的作用就是指明引用当前对象(Person)的实例变量,没有this就是指构造函数中的局部变量。
希望你把构造函数中的局部变量(name) 和 类中的实例变量(name)区分清楚。
当你没有赋值时,String是引用类型,引用类型实例变量有个默认值是null。所以打印null咯。
作者:
魏秀盛
时间:
2012-12-10 17:39
在java中,this关键字相当于C++中的指针,它引用方法的隐式参数,代表当前对象
在你的构造器中,用了this表示这个name指的是Person这个类的name属性,而不是name参数
所以在你的speak方法中,这里的name是name参数,它是String引用类型的,默认值就是null
作者:
netboy032
时间:
2012-12-10 18:21
因为你定义的成员变量是private,如果要赋值的话,可以通过构造器或者通过set方法。this关键字指的是当前对象的实例变量,在构造器中不加的话,那么就对实例变量赋不了值。String类型的变量系统默认赋值是null,所以不加this的话,输出就是null了。
作者:
赵保磊
时间:
2012-12-10 18:59
Person s=new Person ("lisi");
public class Person
{
Person(String name)
{
this.name=name; //这里,this,代表传进来的Person类的对象,即s, name代表传进类的参数,即"lisi".
即该构造方法接收的就是s.name="lisi"; 去掉this,也就没对象了,所以不行。
}
}
作者:
臧盼
时间:
2012-12-10 21:07
this代表当前对象,如果没有加this则表示构造器的参数,你觉得把参数赋给参数有意义吗??
作者:
焦健
时间:
2012-12-10 22:05
{
public static void main(String[] args) {
// TODO Auto-generated method stub
Person s=new Person ("lisi");
s.speak();
}
}
class Person
{
private String name;
Person (String name)
{
this.name=name;//把lisi通过构造方法传递到person类的name,
//this.name表示本类中的name,如果没有this,就无法把lisi传递到person类中的name,打印出来的就是String对象的初始值null。
}
void speak()
{
System.out.println("name="+name);
}
}
作者:
super_Xiong
时间:
2012-12-10 22:47
private String name;
Person (String name)
{
this.name=name;
}
这里你将String name私有话,外部无法访问,然后利用Person这个方法向外提供一个可以操作name的方法。
这里的this指向的是本类中被你私有话的name。如果没有this就是没有对私有的name进行操作
而你私有化的name初始值就是null,所以你speak()方法打印的也就是null
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2