黑马程序员技术交流社区

标题: this关键字的问题 [打印本页]

作者: 罗正荣    时间: 2013-2-20 00:40
标题: this关键字的问题
本帖最后由 罗正荣 于 2013-2-20 11:34 编辑
  1. class Person
  2. {

  3. private String name="张三";//这里name值是只要我创建一个new Person("lisi");之后就会被lisi覆盖掉吗?
  4. private static int age;
  5. Person(int age)
  6. {
  7. this.age = age;
  8. }
  9. Person(String name)//还有这里的
  10. {
  11. this.name = name;
  12. }

  13. public void speak()
  14. {
  15. System.out.println("name="+this.name+"...age="+this.age);
  16. this.show();
  17. }
  18. public void show()
  19. {
  20. System.out.println(this.name);
  21. }

  22. }

  23. public class PersonDemo3
  24. {
  25. public static void main(String[] args)
  26. {



  27. Person p = new Person("lisi");

  28. p.speak();

  29. }
  30. }
复制代码
第一遍听毕老师讲的时候好像还能分清楚,怎么感觉越听越糊涂了,name完全搞混淆了,对象的name、局部变量name、成员变量name{:soso_e134:}
能不能都分别打印一下或者画个图直观的区分一下呢?

作者: 寇弘禄    时间: 2013-2-20 01:13
04.private String name="张三";//这里name值是只要我创建一个new Person("lisi");之后就会被lisi覆盖掉吗?
private String name = "张三";  是person类所有对象的初始值,当你通过构造函数 Person(String name)传入一个name时,你所新new的对象的name被重新赋值,而其他的对象的name的初始值仍是"张三";
10.Person(String name)//还有这里的   这个name只是随便起的一个变量名,也可以叫别的

11.{

12.this.name = name;

13.}

this表示的是是谁在调用就指的是谁,比如p.sperk()中的this 指的就是p
作者: 黑马李超    时间: 2013-2-20 10:16
private String name="张三";
//这里是定义了一个成员变量name,它是作用于整个类中的,对象一建立,就会对对象进行默认初始化。而局部变量是作用于局部范围的,比如定义在方法中的变量name。
private static int age;
Person(int age)
{
this.age = age;
}
Person(String name)
//是对象的构造函数,当建立一个带特有name属性的对象后,会执行这个构造函数,来覆盖掉默认初始化中的name值。
{
this.name = name;/*哪个对象在调用这个构造函数,this指的就是哪个对象。当建立一个Person p = new Person("lisi")时,this指的就是对象p,也就是p.name = name;也就是把“lisi”赋给了p中的name,覆盖掉初始化中的“张三”。*/
}
毕老师讲的对象的初始化过程的视频中对一个对象的建立讲的很详细,可以再看看。
作者: 胥文    时间: 2013-2-20 10:50
上面都说的很好了
个人觉得你的 private static int age;中的static应该去掉,此处没有必要定义成静态的




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