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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© yangxin540 中级黑马   /  2013-8-15 22:15  /  1880 人查看  /  6 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 yangxin540 于 2013-8-16 22:29 编辑

在看毕老师的视频时,毕老师说this语句不能用在一般函数中,但是他又说到了,成员之间的调用都是对象完成的,也就是this,如:
  1. class Demo{
  2.     private String name;
  3.    
  4.     public void print(){
  5.          System.out.print(name);//这里实则是this.name,只是省略了this
  6. }
  7. }
复制代码
所以这两句话给我闹蒙了,求解释,到底this能不能用于一般函数中呢?

评分

参与人数 1技术分 +1 收起 理由
薛鹏鹏 + 1

查看全部评分

6 个回复

倒序浏览
本帖最后由 李政 于 2013-8-15 23:15 编辑

毕老师说的这句话有点不记得了,对于this
只要记住它表示一个本类对象就行,
哪个本类对象调用了该对象中的方法,那么该方法中的this就表示调用这个方法的本类对象

类中的成员都是要被对象调用的,只不过一般不写this,省略了而已。但用于区别类变量与方法中的变量的时候写出来,如构造方法,看情况而定了

对于this,举个稍微复杂点的例子
在银行面试题中有讲到一个枚举
  1. package cn.itcast.bankqueue;

  2. public enum CustomerType {
  3. COMMON,EXPRESS,VIP;
  4. public String toString(){//复写toString()方法,方便直接调用枚举对象,然后打印相应的字符串
  5. String name = null;
  6. switch(this){
  7. case COMMON:
  8. name = "普通";
  9. break;
  10. case EXPRESS:
  11. name = "快速";
  12. break;
  13. case VIP:
  14. name = name();
  15. break;
  16. }
  17. return name;
  18. }
  19. }
复制代码
这段代码中,枚举中的哪个对象调用了toString()方法,那么方法里面的Swicth语句中的this就表示哪个对象

评分

参与人数 1技术分 +1 收起 理由
薛鹏鹏 + 1

查看全部评分

回复 使用道具 举报
this关键字除了在构造函数中调用其他构造函数外,还可以当做一个引用使用。其用于方法中,哪个对象调用该方法,this就引用哪个对象.例如:
方法中局部变量和成员变量重名,我们想调用成员变量时就可以使用this.变量名形式访问成员变量。
其实在一个类中调用本类中的成员的时候都有this,只是大多时候省略了,this就是一个引用,其指向调用所在类成员的对象。

评分

参与人数 1技术分 +1 收起 理由
薛鹏鹏 + 1

查看全部评分

回复 使用道具 举报
我又看了一遍毕老师的视频,毕老师把this的用法分为this语句和this关键字,构造函数之间的相互调用不能像一般函数之间的调用一样,一般函数之间的调用可以直接写函数名,而构造函数之间的调用必须用this语句,而this关键字可以用在一般函数中,this语句只能用于构造函数之间的调用。
  1. class Person
  2. {
  3.             private Sting name;
  4.             private  int  age;

  5.             Person(Sting nane)
  6.            {
  7.                       this.name=name;
  8.             }
  9.            Person(Sting name,int age)
  10.           {
  11.                       this(name);//这个是this语句的用法,只能用于构造函数之间的调用,不能用于一般函数之间的调用。
  12.                       this.age=age;//这个是this关键字的用法,可以用于一般函数。
  13.             }
  14. }
复制代码

评分

参与人数 1技术分 +1 收起 理由
薛鹏鹏 + 1

查看全部评分

回复 使用道具 举报
当然可以,你想啊,set和get方法不都用到了this,this代表当前对象的引用
回复 使用道具 举报
在以下情况需要用到this:
1.通过this调用另一个构造函数,用法是this(参数列表),只能引用一个构造函数且必须位于首行,这个仅仅在类的构造函数中,别的地方不能这么用。
2.函数参数或者函数中的局部变量和成员变量同名的情况下,成员变量被屏蔽,此时要访问成员变量则需要用“this.成员变量名”的方式来引用成员变量。当然,在没有同名的情况下,可以直接用成员变量的名字,而不用this,用了也不为错。
3.在函数中,需要引用该函所属类的当前对象时候,直接用this。
回复 使用道具 举报
探花 中级黑马 2014-3-28 23:14:49
7#
this关键字除了在构造函数中调用其他构造函数以外,还可以当做一个引用来使用。
其用于方法中,哪个对象调用该方法,this就引用哪个对象。例如:
方法中局部变量和成员变量重名,我们想调用成员变量时就可以使用this.变量名形式访问成员变量。
在方法中要将调用该方法的对象作为参数传递给另一个方法时,可以将this作为实参传给该方法。
在内部类中访问外部类的成员时,需要使用外部类名.this.成员名形式访问。
(1)代表当前对象的引用。使用的时候,谁调用方法,this就代表谁。        (2)什么时候使用this呢?                A:当局部变量和成员变量重名的时候,可以用this进行区分。                B:this调用成员方法                C:构造函数中使用this                        **this() 必须放在第一行。

  1. public class Person {
  2.         private String name;
  3.         private int age;
  4.         public Person() {
  5.                 this("zhangs",23);
  6.         }
  7.         public Person(String name, int age) {
  8.                 super();
  9.                 this.name = name;
  10.                 this.age = age;
  11.         }
  12.         public String getName() {
  13.                 return name;
  14.         }
  15.         public void setName(String name) {
  16.                 this.name = name;
  17.         }
  18.         public int getAge() {
  19.                 return age;
  20.         }
  21.         public void setAge(int age) {
  22.                 this.age = age;
  23.         }
  24.         @Override
  25.         public String toString() {
  26.                 return "Person [name=" + name + ", age=" + age + "]";
  27.         }
  28.        
  29.         public void method() {
  30.                 this.print();
  31.         }
  32.        
  33.         public void print() {
  34.                 System.out.println(this关键字");
  35.         }
  36. }
复制代码



回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马