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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 小米哥 中级黑马   /  2016-3-5 19:53  /  421 人查看  /  1 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

java this用法详解

   this关键字,是对所引用对象的访问,一般所说的表示对当前对象的引用是不准确的。下面是取自网络的一个实例,后面,本人将根据个人的理解总结this的用法。另外,关于this在内部类里的用法,请参阅《内部类的使用》:http://blog.sina.com.cn/s/blog_463b79ca01010twq.html

public class ThisTest {
private int i = 0;

// 带int型形参的构造方法

ThisTest(int i) {
  this.i = i + 1;// this表示i是当前类的成员变量,用来区别于当前构造方法的参数变量i(赋值符号“=”右侧的变量)。

  // this.i与i输出,证明两者的不同。

  System.out.println("Int constructor this.i:" + this.i + "  i:" + i);
  
}

// 带String型形参的构造方法

ThisTest(String s) {
  System.out.println("String constructor:  " + s);
}

// 带int、String型形参的构造方法

ThisTest(int i, String s) {
  this(s);// this调用第二个构造器
  
  this.i = i++;// 把方法参数i赋值给成员变量i,然后该参数变量自增1

  System.out.println("IntString constructor  this.i:" +this.i + "  i:" + i + "\n"
    + "String constructor:  " + s);

}

public ThisTest increment() {

  this.i++;

  return this;// 返回的是当前的对象,该对象属于(ThisTest)

}

public static void main(String[] args) {

  ThisTest tt0 = new ThisTest(10);

  ThisTest tt1 = new ThisTest("ok");

  ThisTest tt2 = new ThisTest(20, "ok again!");

  System.out.println(tt0.increment().increment().increment().i);

}
}



1、直接表示当前类使用new创建的对象。比如incement()方法的返回的就是当前对象。

2、指明是当前对象的成员变量,可以用在除static方法的其它任何方法(包括构造方法)的任意位置,用来给该类的成员变量赋值或者使用该类的成员

变量。这种用法较为常见,上例中出现在下列语句中的this,就属于此用法。

this.i = i+1;
this.i = i++;
this.i++;

   当一个方法变量与类成员变量同名时,this的作用尤为突出,上面的前两个语句this.i表示变量i是类ThisTest的成员变量,而单一的变量i,则是方

法的形参。

3、表示调用当前类的其它构造方法,这种用法只能用于在构造方法重载时,执行一个构造方法对另一个构造方法的调用。使用时需要注意几点:

  一是必须作为构造方法的第一行执行语句放置,如果试图放在其它行时,编译将产生错误。在例程中的ThisTest(int i, String s)构造方法的第一行

添加任意执行语句(比如一个变量声明int a;),将抛出错误。

  二是同一构造方法中只准许调用一次其它重构方法,这与第一点要求相符。

 三是多个重构方法可以分别使用this(形参)调用其它构造方法,但是不能造成递归。比如,在例程中,如果我们在构造方法ThisTest(String s)中可

以使用this(1)调用带int型形参的构造方法,但是不能使用this(1,"行不通")递归调用ThisTest(int i, String s)。

4、在内部类内访问外层类引用及外层类成员变量(请参阅<<内部类的使用>>http://blog.sina.com.cn/s/blog_463b79ca01010twq.html)。
public void A{
  priave int a;

  private void B{//类B为类A的内部成员类

    private int a;

    public A get(){
      return A.this;//对外层类引用
    }

    public void set(int a){
       this.a = a;//内部类成员变量及方法参数变量
       A.this.a = this.a;//外层及内部类成员变量
    }
}


提示:在任何static方法中都不需要适用this关键字。

摘自:http://blog.sina.com.cn/s/blog_463b79ca01010tww.html

1 个回复

倒序浏览
谢谢分享,说的很详细
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马