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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 公孙国禄 中级黑马   /  2016-3-27 22:32  /  502 人查看  /  0 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

a 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关键字。

评分

参与人数 1黑马币 +20 收起 理由
刘旭波 + 20 赞一个!

查看全部评分

0 个回复

您需要登录后才可以回帖 登录 | 加入黑马