黑马程序员技术交流社区

标题: 这个程序中三个那么的区别,如果没有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