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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 潘星 中级黑马   /  2012-8-9 13:34  /  1430 人查看  /  6 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 潘星 于 2012-8-10 11:17 编辑

class bbb
{
        public static void main(String[] args)
        {
                Person p=new Person("lisi",20);
                System.out.println(p.getName()+p.getAge());
        }
}
class Person
{
         private int age;
         private String name;
        Person(String name,int age)
        {
                this.age=age;
                this.name="haha";  
这里虽然把name改成了"haha",但是在上面创建对象的时候传入 的是"lisi",
结果为什么是"haha",不是"lisi"?对象建立的时候参数到底是怎么变化的,头都晕了。

                                       
        }
        public void setName(String name)
        {
                this.name=name;
        }
        public String getName()
        {
                return name;
        }
        public int getAge()
        {
                return age;
        }
}

评分

参与人数 1技术分 +1 收起 理由
杨志 + 1

查看全部评分

6 个回复

倒序浏览
Person p=new Person("lisi",20);
程序执行到这句时,执行的过程是:
1、将Person类加载到内存,
2、对age、name进行默认初始化即age=0,name=null,
3、构造函数初始化,this.age=age;this.name="haha";这里虽然你传的参数是20和"lisi",但是构造函数里面赋值给name的值是"haha",所以结果是"haha",不是"lisi"
回复 使用道具 举报
因为你传入的 lisi 进入
Person(String name,int age)
         {
                 this.age=age;
                 this.name="haha";  
        }
而这个构造函数的参数列表里 neme 根本就没有指向, 对象的name直接被赋值为haha
所以无论你传什么姓名 输出的都是haha
回复 使用道具 举报
本帖最后由 黄敏 于 2012-8-9 14:09 编辑

class bbb
{
        public static void main(String[] args)
        {
                Person p=new Person("lisi",20);      //  当你创建对象并实力化对象的时候   是这样的   调用Person中的构造放Person()进行初始化 但是jvm调用构造函数时候看到的是你已经把“haha”赋给了this.name   jvm就默认   “haha”就是this.name的初始值了,还涉及到的就是你定义了Sting类型的name变量 并把“haha”给了this.name,name的值就不会变的 所以最后你看到的就”haha“了  
                System.out.println(p.getName()+p.getAge());
        }
}
class Person
{
         private int age;
         private String name;
        Person(String name,int age)
        {
                this.age=age;
                this.name="haha";  
这里虽然把name改成了"haha",但是在上面创建对象的时候传入 的是"lisi",
结果为什么是"haha",不是"lisi"?对象建立的时候参数到底是怎么变化的,头都晕了。
                                       
        }
        public void setName(String name)
        {
                this.name=name;
        }
        public String getName()
        {
                return name;
        }
        public int getAge()
        {
                return age;
        }
}
回复 使用道具 举报
this指向的是对象,哪个对象调用name,name就被哪个对象调用;构造函数是给对象附初始值,在你建立对象后的lisi是给Person附的初始值,this.name="haha"是把Person的name初始值覆盖,所以打印的是haha。望采纳,谢谢!
回复 使用道具 举报
本帖最后由 张扬123 于 2012-8-9 15:13 编辑

我的理解是这样的。
class bbb
{
        public static void main(String[] args)
        {
                Person p=new Person("lisi",20);主函数传了一个值进来,调用的是Person(String name,int age)
                System.out.println(p.getName()+p.getAge());年龄没有被更改过,最终打印的是“haha”,20
        }
}
class Person
{
         private int age;
         private String name;
        Person(String name,int age)进到这里面来
        {
                this.age=age;
                this.name="haha";  将name改为“haha”

        }
        public void setName(String name)
        {
                this.name=name;
        }
        public String getName()
        {
                return name;
        }
        public int getAge()
        {
                return age;
        }
}
回复 使用道具 举报
潘星 中级黑马 2012-8-10 11:16:43
7#
大概明白怎么回事了,也就是说现初始化 Person("lisi",20);
在初始化构造函数里面的内容,"haha",就把"lisi"给替换掉了,谢谢了。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马