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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 范龙彬 黑马帝   /  2011-10-24 16:31  /  3746 人查看  /  11 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

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("张三");  这句话 是怎么执行的.  求解..

该贴已经同步到 范龙彬的微博

11 个回复

倒序浏览
因为你是new了一下,所以你新创建了一个对象,和以前的那个没有关系了,你把new去掉后在试试。
回复 使用道具 举报
本帖最后由 陆华山 于 2011-10-24 16:57 编辑

结果是张三啊 你忘写this了
回复 使用道具 举报
郭敏 黑马帝 2011-10-24 16:49:25
板凳
因为你在创建Person 对象时,没有给该对象中的name赋值。 问题出在构造函数中, 将其改为
        Person2(String name)
        {
               this.name = name;
        
                speak();
               
        }
然后在试试!!
回复 使用道具 举报
构造函数有问题,应该是this.name = name;
其他的没有什么问题,在main函数中创建了一个新的Person2实例,然后调用类Person2的构造函数,执行构造函数中得speak()方法,打印出this.name = 张三。
回复 使用道具 举报
吉许 黑马帝 2011-10-24 17:06:55
地板
问题出在你的name=name;分不清是哪一个.解释上面有.
new Person2("张三");是传递一个对象参数,在实例化的时候会调用构造方法,将"张三"这个对象传递给构造方法.
回复 使用道具 举报
范龙彬 黑马帝 2011-10-24 17:21:40
7#
本帖最后由 范龙彬 于 2011-10-24 17:32 编辑
张奇云 发表于 2011-10-24 16:57
构造函数有问题,应该是this.name = name;
其他的没有什么问题,在main函数中创建了一个新的Person2实例,然 ...


解决了是忘写this  
回复 使用道具 举报
范龙彬 黑马帝 2011-10-24 17:25:21
8#
本帖最后由 范龙彬 于 2011-10-24 17:31 编辑
陆华山 发表于 2011-10-24 16:49
结果是张三啊 你忘写this了


解决了是忘写this了
回复 使用道具 举报
董浩 黑马帝 2011-10-24 19:44:11
9#
视频中特意说了这个问题,l局部定义了name使用的就是局部的name;区分不了那个是局部的name,那个是成员的name。所有在name标示出来 this.name=name;这样就对了
回复 使用道具 举报
杨强 黑马帝 2011-10-24 20:01:32
10#
{:soso_e198:}{:soso_e198:}{:soso_e198:}{:soso_e198:}{:soso_e198:}{:soso_e198:}{:soso_e198:}{:soso_e198:}
回复 使用道具 举报
张振宁 黑马帝 2011-10-25 17:39:36
11#
本帖最后由 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:25
12#
构造方法 里面的  name=name;这句有问题,形式参数与你的类字段名相同时,你这样在等号左边直接引用是不行的,前面加上this.关键字就行了。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马