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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

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

评分

参与人数 1技术分 +1 收起 理由
古银平 + 1 神马都是浮云

查看全部评分

7 个回复

倒序浏览
本帖最后由 翁鹏 于 2012-12-10 16:53 编辑

(如果没有this)
你就没有为Person类中的实例变量name赋值,this的作用就是指明引用当前对象(Person)的实例变量,没有this就是指构造函数中的局部变量。
希望你把构造函数中的局部变量(name) 和 类中的实例变量(name)区分清楚。

当你没有赋值时,String是引用类型,引用类型实例变量有个默认值是null。所以打印null咯。

评分

参与人数 1技术分 +1 收起 理由
崔政 + 1

查看全部评分

回复 使用道具 举报
在java中,this关键字相当于C++中的指针,它引用方法的隐式参数,代表当前对象
在你的构造器中,用了this表示这个name指的是Person这个类的name属性,而不是name参数
所以在你的speak方法中,这里的name是name参数,它是String引用类型的,默认值就是null
回复 使用道具 举报
因为你定义的成员变量是private,如果要赋值的话,可以通过构造器或者通过set方法。this关键字指的是当前对象的实例变量,在构造器中不加的话,那么就对实例变量赋不了值。String类型的变量系统默认赋值是null,所以不加this的话,输出就是null了。

评分

参与人数 1技术分 +1 收起 理由
崔政 + 1

查看全部评分

回复 使用道具 举报
Person s=new Person ("lisi");

public class Person
{
   Person(String name)
{
this.name=name;  //这里,this,代表传进来的Person类的对象,即s,  name代表传进类的参数,即"lisi".  
即该构造方法接收的就是s.name="lisi";  去掉this,也就没对象了,所以不行。
}

}

评分

参与人数 1技术分 +1 收起 理由
崔政 + 1

查看全部评分

回复 使用道具 举报
this代表当前对象,如果没有加this则表示构造器的参数,你觉得把参数赋给参数有意义吗??
回复 使用道具 举报
焦健 高级黑马 2012-12-10 22:05:25
7#
{
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);
         }
}

评分

参与人数 1技术分 +1 收起 理由
崔政 + 1

查看全部评分

回复 使用道具 举报
private String name;
         Person (String name)
        {
                this.name=name;
        }
这里你将String name私有话,外部无法访问,然后利用Person这个方法向外提供一个可以操作name的方法。
这里的this指向的是本类中被你私有话的name。如果没有this就是没有对私有的name进行操作
而你私有化的name初始值就是null,所以你speak()方法打印的也就是null

评分

参与人数 1技术分 +1 收起 理由
崔政 + 1

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马