黑马程序员技术交流社区
标题:
关于构造函数中this关键字的疑问
[打印本页]
作者:
潘星
时间:
2012-8-9 13:34
标题:
关于构造函数中this关键字的疑问
本帖最后由 潘星 于 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;
}
}
作者:
王少岩
时间:
2012-8-9 13:51
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"
作者:
尤洋
时间:
2012-8-9 14:00
因为你传入的 lisi 进入
Person(String name,int age)
{
this.age=age;
this.name="haha";
}
而这个构造函数的参数列表里 neme 根本就没有指向, 对象的name直接被赋值为haha
所以无论你传什么姓名 输出的都是haha
作者:
黄敏
时间:
2012-8-9 14:02
本帖最后由 黄敏 于 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;
}
}
作者:
黑马-王泽斌
时间:
2012-8-9 14:02
this指向的是对象,哪个对象调用name,name就被哪个对象调用;构造函数是给对象附初始值,在你建立对象后的lisi是给Person附的初始值,this.name="haha"是把Person的name初始值覆盖,所以打印的是haha。望采纳,谢谢!
作者:
张扬123
时间:
2012-8-9 15:09
本帖最后由 张扬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
大概明白怎么回事了,也就是说现初始化 Person("lisi",20);
在初始化构造函数里面的内容,"haha",就把"lisi"给替换掉了,谢谢了。
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2