黑马程序员技术交流社区

标题: 菜鸟的疑惑: 一个关于构造函数的问题 [打印本页]

作者: 范龙彬    时间: 2011-10-24 16:31
标题: 菜鸟的疑惑: 一个关于构造函数的问题
class Person2
{
        String name;
        Person2(String name)
        {
                name = name;
       
                speak();
               
        }
        void speak()
        {
                System.out.println("name="+name);
        }
}
class Person2Demo
{
        public static void main(String [] args)
        {
                new Person2("张三");
        }
}
打印结果:name=null;      为什么不是name= 张三;
new Person2("张三");  这句话 是怎么执行的.  求解..

该贴已经同步到 范龙彬的微博
作者: 王维波    时间: 2011-10-24 16:39
因为你是new了一下,所以你新创建了一个对象,和以前的那个没有关系了,你把new去掉后在试试。
作者: 陆华山    时间: 2011-10-24 16:49
本帖最后由 陆华山 于 2011-10-24 16:57 编辑

结果是张三啊 你忘写this了
作者: 张奇云    时间: 2011-10-24 16:57
构造函数有问题,应该是this.name = name;
其他的没有什么问题,在main函数中创建了一个新的Person2实例,然后调用类Person2的构造函数,执行构造函数中得speak()方法,打印出this.name = 张三。
作者: 吉许    时间: 2011-10-24 17:06
问题出在你的name=name;分不清是哪一个.解释上面有.
new Person2("张三");是传递一个对象参数,在实例化的时候会调用构造方法,将"张三"这个对象传递给构造方法.

作者: 范龙彬    时间: 2011-10-24 17:21
本帖最后由 范龙彬 于 2011-10-24 17:32 编辑
张奇云 发表于 2011-10-24 16:57
构造函数有问题,应该是this.name = name;
其他的没有什么问题,在main函数中创建了一个新的Person2实例,然 ...


解决了是忘写this  
作者: 范龙彬    时间: 2011-10-24 17:25
本帖最后由 范龙彬 于 2011-10-24 17:31 编辑
陆华山 发表于 2011-10-24 16:49
结果是张三啊 你忘写this了


解决了是忘写this了
作者: 董浩    时间: 2011-10-24 19:44
视频中特意说了这个问题,l局部定义了name使用的就是局部的name;区分不了那个是局部的name,那个是成员的name。所有在name标示出来 this.name=name;这样就对了
作者: 杨强    时间: 2011-10-24 20:01
{:soso_e198:}{:soso_e198:}{:soso_e198:}{:soso_e198:}{:soso_e198:}{:soso_e198:}{:soso_e198:}{:soso_e198:}
作者: 张振宁    时间: 2011-10-25 17:39
本帖最后由 Simple 于 2011-10-25 17:41 编辑

class Person2{
        String name;               全局变量
        Person2(String name) {
                name = name;   --------------------- 2    设置 把参数  name 赋值给参数 name  并不是全局变量 name  
                                                                         要想把参数 赋值给全局变量name  需要添加 this 关键字   this.name = name;     this.name 是全局变量 name


                speak();             --------------------- 3  
        }
        void speak() {

                System.out.println("name="+name); --------------------- 3   输出全局变量  这个根本就没有赋值  


        }
}
class Person2Demo{
        public static void main(String [] args){
                new Person2("张三");            --------------------- 1    创建一个Person2的构造函数 Person2(String name)
        }
}

作者: 秦冲    时间: 2011-10-25 18:49
构造方法 里面的  name=name;这句有问题,形式参数与你的类字段名相同时,你这样在等号左边直接引用是不行的,前面加上this.关键字就行了。




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