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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

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. }
复制代码




9 个回复

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

这个也是毕老师的原笔记

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

回复 使用道具 举报
代码出错了   这个才对

  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.         }
复制代码


回复 使用道具 举报
首先你要知道毕老师这里所说的是this 语句,看过视频的应该知道老师这里说的语句其实是this();也就是在构造函数中使用的。通常是构造函数进行初始化赋值还有调用本类其它构造函数(比如this(name);)。
至于你所说的第二个show()方法的调用,这里已经并不是this语句了(this()).所以这里跟毕老师说的并没有冲突。
this:所代表的是本类对象的引用。也就是那个对象调用了this所在的函数this就代表那个对象。
所以show()方法这里是调用该方法的对象的引用。
回复 使用道具 举报
字节码文件 就是一个模板, 每次你使用这个模板做出一个对象来(new一个),this 就是指这个做出来的对象。做出那个出来了,this就是指那个对象。
回复 使用道具 举报
一般函数不能用this,只能用在构造函数间。
这句话是不对的,getter/setter都经常会用到的。
回复 使用道具 举报
毕老师在介绍this语句时,说过一句话:实际没有this语句  ,只是毕老师对这种代码的一种说法。  个人认为,只有在构造器内,当调用本类其它构造器时,才称为this语句。在方法中this是一个关键字,代表this所在非静态方法的所属对象的引用
回复 使用道具 举报
cly成子 来自手机 中级黑马 2015-2-11 14:40:46
8#
基本上综合上面的补充就对了~
回复 使用道具 举报
this:所代表的是本类对象的引用。也就是那个对象调用了this所在的函数this就代表那个对象。
所以show()方法这里是调用该方法的对象的引用。
回复 使用道具 举报
this不仅仅只是用于构造函数间的调用,也可以用于成员变量同名的情况下
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马