黑马程序员技术交流社区

标题: 我想问this关键字上,毕老师说的我没有懂。各位懂得告我吧 [打印本页]

作者: jiangwenjun    时间: 2015-2-11 02:21
标题: 我想问this关键字上,毕老师说的我没有懂。各位懂得告我吧

this语句:

       用于构造函数之间进行互相调用。如:this(name);

        this语句只能定义在构造函数的第一行。因为初始化要先执行。

上面试毕老师的原笔记!第一句我不太懂!用于构造函数之间的互相调用。


那么我下面代码  方法show(),为什么可以使用this语句,不是在构造函数之间互相调用吗?

我知道这里是可以的,但我不理解毕老师这句的用意。

懂得同学,告诉我行吗?谢谢了!


  1. class Person  
  2. {  
  3.     private String name;  
  4.     private int age;  
  5.     Person(int age)//局部变量时age,成员变量也是age  
  6.     {  
  7.         this.age = age;//this能够很好区分  
  8.     }  
  9.     Person(String name)  
  10.     {  
  11.         this.name = name;//这里用this表示调用构造方法的对象  
  12.     }  
  13.     Person(String name,int age)  
  14.     {  
  15.         this.name = name;  
  16.         this.age = age;  
  17.     }  
  18.   
  19.     public void speak()  
  20.     {  
  21.         System.out.println("name="+name+"...age="+age);  
  22.         show();  
  23.     }  
  24.     public void show()  
  25.     {  
  26.         System.out.println(this.name);  
  27.     }  
  28. }
  29. class Test
  30. {
  31.         public static void main(String[] args)
  32.         {
  33.                 Person p = new person();
  34.                 p.person(将军,18);
  35.                 p.speak();
  36.         }
  37. }
复制代码





作者: jiangwenjun    时间: 2015-2-11 02:27
补充:::this的两种用法:1、用于区分同名变量的情况,说的成员和局部同名的时候;2、用于构造函数间调用。
注:一般函数不能直接调用构造函数,因为this语句不能用在一般函数中,只能用在构造函数间。

这个也是毕老师的原笔记

一般函数不能用this,只能用在构造函数间。


作者: jiangwenjun    时间: 2015-2-11 02:31
代码出错了   这个才对

  1. package com.itheima;

  2.         class Person  
  3.         {  
  4.             private String name;  
  5.             private int age;  
  6.             Person(int age)//局部变量时age,成员变量也是age  
  7.             {  
  8.                 this.age = age;//this能够很好区分  
  9.             }  
  10.             Person(String name)  
  11.             {  
  12.                 this.name = name;//这里用this表示调用构造方法的对象  
  13.             }  
  14.             Person(String name,int age)  
  15.             {  
  16.                 this.name = name;  
  17.                 this.age = age;  
  18.             }  
  19.           
  20.             public void speak()  
  21.             {  
  22.                 System.out.println("name="+name+"...age="+age);  
  23.                 show();  
  24.             }  
  25.             public void show()  
  26.             {  
  27.                 System.out.println(this.name);  
  28.             }  
  29.         }
  30.         class Testf
  31.         {
  32.                 public static void main(String[] args)
  33.                 {
  34.                         Person p = new Person("将军",18);
  35.                         p.speak();
  36.                 }
  37.         }
复制代码



作者: 书生灬流年    时间: 2015-2-11 07:34
首先你要知道毕老师这里所说的是this 语句,看过视频的应该知道老师这里说的语句其实是this();也就是在构造函数中使用的。通常是构造函数进行初始化赋值还有调用本类其它构造函数(比如this(name);)。
至于你所说的第二个show()方法的调用,这里已经并不是this语句了(this()).所以这里跟毕老师说的并没有冲突。
this:所代表的是本类对象的引用。也就是那个对象调用了this所在的函数this就代表那个对象。
所以show()方法这里是调用该方法的对象的引用。
作者: 瞿乐    时间: 2015-2-11 12:09
字节码文件 就是一个模板, 每次你使用这个模板做出一个对象来(new一个),this 就是指这个做出来的对象。做出那个出来了,this就是指那个对象。
作者: 瞿乐    时间: 2015-2-11 12:10
一般函数不能用this,只能用在构造函数间。
这句话是不对的,getter/setter都经常会用到的。
作者: guiqi225    时间: 2015-2-11 13:13
毕老师在介绍this语句时,说过一句话:实际没有this语句  ,只是毕老师对这种代码的一种说法。  个人认为,只有在构造器内,当调用本类其它构造器时,才称为this语句。在方法中this是一个关键字,代表this所在非静态方法的所属对象的引用
作者: cly成子    时间: 2015-2-11 14:40
基本上综合上面的补充就对了~
作者: konglingzhiyu    时间: 2015-2-11 20:05
this:所代表的是本类对象的引用。也就是那个对象调用了this所在的函数this就代表那个对象。
所以show()方法这里是调用该方法的对象的引用。
作者: ~我思故我在~    时间: 2015-2-11 20:45
this不仅仅只是用于构造函数间的调用,也可以用于成员变量同名的情况下




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