this的三种用法 详解

public class ThisTest2 {
	public static void main(String[] args) {
                // 测试this表示当前对象的引用
		SelfObject aaa = new SelfObject();
		aaa.test();
	}
}

/**

 * 一、使用this引用成员变量

 * 在一个类的方法或构造方法内部,可以使用"this.成员变量名"来引用成员变量

 * 有时可以省略,有时不能省略

 */

class MemberVariable {
	private int a;
	public MemberVariable(int a) {
		this.a = a;
	}
	public int getA() {
		return a;
	}
	public void setA(int a) {
		this.a = a;
	}
}

注解:

  在该段代码的 构造方法 和 setA方法 的内部,都是用this.a引用类的成员变量a

  因为无论在 构造方法 还是 setA方法 内部,都包含2个变量名为a的变量,一个是参数a,另外一个是成员变量a。

  按照Java语言的变量作用域,参数a的作用范围在构造方法或方法的内部,成员变量a的作用范围是整个类的内部

  这样在构造方法和setA方法内部就存在了变量a的冲突

  Java语言规定当变量作用范围重叠时,作用域小的变量覆盖作用域大的变量.所以在构造方法和setA方法内部,参数a起作用

  这样需要访问成员变量a则必须使用this进行引用.当然,如果变量名不发生重叠,则this可以省略

  但是为了增强代码的可读性,一般将参数的名称和成员变量的名称保持一致,所以this的使用频率在规范的代码内部应该很多

/**

 * 二、使用this关键字引用构造方法

 */

class Constructor {
	 int a ;
	 public Constructor() {
		this(0);
	}
	 public Constructor(int a) {
		this.a = a;
	}
 }

注解:

   在无参构造方法内部,使用this调用了另一个有参构造方法,其中0是根据需要传递的参数的值

   当一个类内部的构造方法比较多时,可以只书写一个构造方法的内部功能代码

   然后其他的构造方法都通过调用该构造方法来实现

   这样既保证了所有的构造方法是统一的,也降低了代码的重复

   注意: 在构造方法内部使用this关键字调用其他构造方法时,必须写在第一行,只能调用一个且仅一次构造方法 

/**

  * 三、使用this代表自身对象(默认)

  */

class SelfObject {
	 // SelfObject object;
	  public SelfObject() {
		//object = this;
	}
	  public void test() {
		System.out.println(this);
	}
  }

注解:

    创建一个引用对象object 在构造方法内部,将对象this的值赋给object

    在test方法内部,输出对象this的内容,这里的this都代表自身类型的对象


/**

    * 四、引用成员方法

    * 在一个类的内部,成员方法之间的互相调用时也可以使用“this.方法名(参数)”来进行引用

    * 只是所有这样的引用中this都可以省略,可有可无

    */


 
结论:

  1.表示引用类的成员变量 而非函数

  注意: 函数参数和成员变量同名进行区分

  2.在构造方法中引用其他构造器(也就是构造方法)

  注意: 只能引用一个构造方法,且在第一行

  3.表示对当前对象的引用 this关键字代表自身类的对象

  4.引用成员方法

  注意: this不能用在static方法中



猜你喜欢

转载自blog.csdn.net/lijock/article/details/80293453