黑马程序员技术交流社区

标题: 到底为什么要用this? [打印本页]

作者: 于潇    时间: 2012-4-18 13:04
标题: 到底为什么要用this?
class student
{
  private String name;
  private int age;
  
this name = name;
this age = age;
  student()
  {
   }
   }

为什么不定义其他变量,比如 name = n ; age = a ; 这样来写程序呢?
作者: 张卯    时间: 2012-4-18 14:43
单个字母阅读性太差,代码多了就可能搞乱,其实刚开始对this的理解都会有点困难,慢慢来吧,等你学到后面就差不多总结出规律了~
作者: 黑马-刘昌文    时间: 2012-4-18 14:46
this代表当前对象
作者: liqian    时间: 2012-4-18 14:56
1.表示对当前对象的引用!
2.表示用类的成员变量,而非函数参数,注意在函数参数和成员变量同名是进行区分!其实这是第一种用法的特例,比较常用,所以那出来强调一下。
3.用于在构造方法中引用满足指定参数类型的构造器(其实也就是构造方法)。但是这里必须非常注意:只能引用一个构造方法且必须位于开始!
   注意:this不能用在static方法中!所以甚至有人给static方法的定义就是:没有this的方法!虽然夸张,但是却充分说明this不能在static方法中使用!
作者: 韩新凯    时间: 2012-4-18 14:56
楼上正解
作者: 欧阳才志    时间: 2012-4-18 15:25
this代表的是当前对象,this.调用的是当前对象的该变量,而不是其他对象的该变量,这样设置后,可读性更好!
作者: 翟友伟    时间: 2012-4-18 17:21
楼主头像 有点邪恶。。。{:soso_e151:}
作者: 张超超    时间: 2012-4-18 17:24
java中this详解
一些刚接触java的新手会有对this有这样那样的困惑,本文将尽我所能解释java中this的用法。
this说白了,指的就是当前对象。看如下代码:

public class TestThis ...{
    int i = 1;
    TestThis(int i)...{
        System.out.println(”i=”+i);
        System.out.println(”this.i=”+this.i);
    }
    public class Another...{
        int i=3;
        Another(int i)...{
            System.out.println(”i=”+i);
            System.out.println(”this.i=”+this.i);
            System.out.println(”TestThis.this.i=”+TestThis.this.i);
        }
    }
    public static void main(String[] args)...{
        TestThis t=new TestThis(2);
        TestThis.Another a=t.new Another(4);
    }
}


/*Output:
i=2
this.i=1
i=4
this.i=3
TestThis.this.i=1
*///:~

看内部类的构造函数输出分别是:

i=4
this.i=3
TestThis.this.i=1

i表示的是你传进去的参数;this.i指的是当前对象的i,就是内部类的i;TestThis.this.i表示的是TestThis的当前对象的i。为什么要引入this呢?就像内部类,有两个i,一个是局部变量,一个是内部类的变量。怎么区分这两个i呢?所以就引入了this;在创建类的时候new TestThis();的时候,java在底层吧new这个对象的引用传给了自己。我们怎么调用传给自己的这个对象呢,就是用this。而this.xxx指的就是当前对象的xxx。


作者: 于潇    时间: 2012-4-18 18:47
翟友伟 发表于 2012-4-18 17:21
楼主头像 有点邪恶。。。

你们头像都那么正经八百的多累啊
作者: 刘_浩    时间: 2012-4-18 20:36
如果按照,后面的那种方式来写的话,就不具有可读性了,谁也很难想到n和a倒底代表的是什么?但是见到了name   age大家很容易就知道了,这是具有代表性的。当然就出现了加this的情况。是因为,在方法中,我们可以给局部变量付值,但是这是在类也出现了相同的标识符,所以用this加以区分。这是因为, 在成员都是由方法访问的,所以要有对象,而this是对象的统一代表;说明这个标识是成员。
作者: 申振华    时间: 2012-4-18 21:58
name,age这样的写一眼就能明白所要表示的属性名称。若果写一个n,a去表示属性名称。对于写程序的人来说都很明白的,如果一个程序按你这样的写法去写,要别人来维护或升级,谁知道n表示的是什么,这样维护人员就要花很大的时间去读懂你的代码。可读性比较差。
至于 this.name=name;
其实这个很好理解的。this.name:this就表示当前(本类)对象,通过对象.属性来访问一个属性。 this.name 就表示这个类中的name属性。等号右边的就是外部传入的参数name。那么this.name=name 就把外部参数的name赋值给本类中的name属性
作者: 韩新凯    时间: 2012-4-18 22:35
毕老师说:this看上去是区分局部变量和成员变量同名的情况。
         this为什么可以解决这个问题呢?
         this到底代表的是什么呢?

         this:就是代表本类的对象,到底代表哪一个对象呢?
              this代表它所在函数所属对象的引用。
             简单说:哪个对象在调用this所在的函数,this就代表哪个对象。
建议:看毕老师讲的java基础视频教程。

增加this增加可读性。




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