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
|
|