黑马程序员技术交流社区
标题:
一个java小问题(已解决)
[打印本页]
作者:
韩新凯
时间:
2012-4-18 21:58
标题:
一个java小问题(已解决)
本帖最后由 韩新凯 于 2012-4-19 08:08 编辑
class PersonDemo {
private String name;
private int age;
public PersonDemo(String name, int age) {
name = name;
age = age;
}
public void speak() {
System.out.println("name=" + name + "---" + "age=" + age);
}
}
public class Haha {
public static void main(String[] args) {
PersonDemo pd = new PersonDemo("haha", 111);
pd.speak();
}
}
输出结果为什么是name=null---age=0,为什么没有赋值成功?
作者:
李平
时间:
2012-4-18 22:00
在PersonDemo 类中的赋值语句改为
this.name = name;
this.age = age;
作者:
liuyang
时间:
2012-4-18 22:01
public PersonDemo(String name, int age) {
this.
name = name;
this.
age = age;
}
作者:
zhaishuang
时间:
2012-4-18 22:18
上面的两个兄弟已经说了,没有写this关键字,其实构造函数参数列表中的两个变量相当于函数中的局部变量。它们并不是类中的成员变量。创建对象并对构造函数初始化时,你写的代码只是局部变量给自己赋值了。this代表创建本类的对象,是一个引用。指向了你创建的对象。当写上this关键字后,自然就会把值赋给对象中的成员变量了。
作者:
王永旺
时间:
2012-4-18 22:22
因为你的局部变量已经存在name和age了,所以成员变量就无法被识别了,系统会首先识别 public PersonDemo(String name, int age) 里面的name和age
也就是说在编译的时候 name = name; age = age; 在系统眼里左边和右边实际上就是一个变量。
所以在这个时候,你只有使用关键字this,才能够使编译器正确识别。
所以要改成下面的语句。
this.name = name;
this.age = age;
作者:
光sail
时间:
2012-4-18 22:26
public PersonDemo(String name, int age) {
name = name;
age = age;
}
这段代码错误,name = name;
age = age
没有把传递进来的变量赋值给PersonDemo中的name和age这两个变量,所以String类型的name默认值为null,int类型的变量默认值为0.
代码应该改成
public PersonDemo(String name, int age) {
this.name = name;
this.age = age;
}
作者:
李斌
时间:
2012-4-18 22:41
这里有个关于this关键字的知识点,和你一起总结一下哦:当定义类中功能时候 该函数内部 要用到调用该函数的对象时,这时用this来表示这个对象,简单的说,说调用这个函数,this就代表谁。这该题中
PersonDemo pd=new PersonDemo("haha",111) ,pd变量调用了函数PersonDemo,并且将haha 和111 赋给
Stringname 和 int age,注意此时要用this来“代表”pd,实现将他们赋给成员变量。最终改变堆内存中元素的值。
作者:
zhaishuang
时间:
2012-4-18 22:47
顺便说说this的几种用法吧,希望对你有帮助。
1,当成员变量和局部变量同名时。在方法中使用this时,表示的是此方法所在类中的成员变量。就像你写的例子中就是this的应用之一;
2,在构造函数中可以用this关键字调用同类中的其他构造函数。但是
必须在构造函数中第一行
。例如在你的PersonDemo类中有一个空参数的构造函数的话,可以在有参数的构造函数中通过
this();
调用;
3,this不能出现在静态函数中。因为在静态加载的时候对象还不存在。
4,在调用本类成员变量或者局部函数时,要用到,其原理和第一条相同,目的就是区分同名变量时应用。
作者:
刘_浩
时间:
2012-4-18 22:53
当然是这样的呀。因为name = name;age = age;在这里都是局部变量。必须指定其所属对象就不会了。this.name=name;this.age=age;就好了。
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2