1、this关键字用来表示当前对象本身,或当前类的一个实例,通过this可以调用本对象的所有方法和属性。
public class Demo {
private int a;
private int b;
public Demo(int a, int b) {
this.a = a;
this.b = b;
}
/**
* 作为方法名来初始化对象
*/
public Demo() {
this(1,2);
}
public void sum() {
int c = this.a + this.b;
}
public void sum2(){
this.sum();
}
/**
* 作为参数传递
*/
public void test(){
new B(this);
}
}
注意:this只有类实例化后才有意义,所以this关键字必须放在非静态方法里面。
2、this的用途
-
使用this区分同名变量(成员变量与方法内部的变量重名时,希望在方法内部调用成员变量,使用this来区分)
-
作为方法名来初始化对象,也就是相当于调用本类的其它构造方法,它必须作为构造方法的第一句。
-
在构造方法中调用另一个构造方法,调用动作必须置于最起始的位置。
-
不能在构造方法以外的任何方法内调用构造方法。
-
在一个构造方法内只能调用一个构造方法。
-
-
作为参数传递,需要在某些完全分离的类中调用一个方法,并将当前对象的一个引用作为参数传递。
-
返回对象的值,返回类的引用。
-
在内部类和匿名类中使用this时,this指的是内部类和匿名类本身。如果我们要使用外部类的方法和变量的话,则应该加上外部类的类名。
3、内部类和匿名类中使用this
public class Demo {
public void demo(){
System.out.println(this);
}
public void test(){
new Thread(new Runnable() {
@Override
public void run() {
//匿名类
System.out.println(this);
}
}).start();
}
public void test2(){
new Thread(new Runnable() {
@Override
public void run() {
//外部类
System.out.println(Demo.this);
}
}).start();
}
private class InnerClass {
private String name;
public void innerTest() {
//内部类
System.out.println(this);
}
}
public static void main(String[] args) {
Demo demo = new Demo();
demo.demo();
demo.test();
demo.test2();
demo.new InnerClass().innerTest();
}
}
依次输出,$表示有内部类或匿名类
com.Demo@3ac42916
com.Demo$1@471fab
com.Demo@3ac42916
com.Demo$InnerClass@47d384ee