this是指当前对象自己
当在一个类中要明确指出使用对象自己的的变量或函数时就应该加上this引用如下面这个例子中:
public class A {
String s = Hello;
public A(String s) {
Systemoutprintln(s = + s);
Systemoutprintln( > thiss = + thiss);
thiss = s;
Systemoutprintln( > thiss = + thiss);
}
public static void main(String[] args) {
new A(HelloWorld!);
}
}
运行结果
s = HelloWorld!
> thiss = Hello
> thiss = HelloWorld!
在这个例子中构造函数A中参数s与类A的变量s同名这时如果直接对s进行操作则是对参数s进行操作若要对类A的变量s进行操作就应该用this进行引用运行结果的第一行就是直接对参数s进行打印结果后面两行分别是对对象A的变量s进行操作前后的打印结果
把this作为参数传递
当你要把自己作为参数传递给别的对象时也可以用this如
public class A {
public A() {
new B(this)print();
}
public void print() {
Systemoutprintln(Hello from A!);
}
}
public class B {
A a;
public B(A a) {
thisa = a;
}
public void print() {
aprint();
Systemoutprintln(Hello from B!);
}
}
运行结果
Hello from A!
Hello from B!
在这个例子中对象A的构造函数中用new B(this)把对象A自己作为参数传递给了对象B的构造函数
注意匿名类和内部类中的中的this
有时候我们会用到一些内部类和匿名类当在匿名类中用this时这个this则指的是匿名类或内部类本身这时如果我们要使用外部类的方法和变量的话则应该加上外部类的类名如下面这个例子
public class A {
int i = ;
public A() {
Thread thread = new Thread() {
public void run() {
for(;;) {
Athisrun();
try {
sleep();
} catch(InterruptedException ie) {
}
}
}
};
threadstart();
}
public void run() {
Systemoutprintln(i = + i);
i++;
}
public static void main(String[] args) throws Exception {
new A();
}
}
在上面这个例子中 thread 是一个匿名类对象在它的定义中它的 run 函数里用到了外部类的 run 函数这时由于函数同名直接调用就不行了这时有两种办法一种就是把外部的 run 函数换一个名字但这种办法对于一个开发到中途的应用来说是不可取的那么就可以用这个例子中的办法用外部类的类名加上 this 引用来说明要调用的是外部类的方法 run