浅析Java ClassName.this中类名.this关键字的理解
在Java中,当类中有内部类的时候,在内部类中可能会出现与外部类同名的成员变量或方法,此时就需要使用类名.this
关键字来引用外部类的成员。
定义
ClassName.this
可以指向外部类的实例。在内部类中使用ClassName.this
引用的是外部类的实例对象。
示例1
在下面的示例中,我们定义了一个Calculation
类,其中定义了两个内部类Addition
和Subtraction
,并且在内部类中使用了Calculation.this
引用了外部类的实例。
public class Calculation {
int num = 100;
class Addition {
int num = 50;
public void add(int a, int b) {
int result = a + b + num + Calculation.this.num;
System.out.println("Result is: " + result);
}
}
class Subtraction {
int num = 25;
public void subtract(int a, int b) {
int result = a - b - num - Calculation.this.num;
System.out.println("Result is: " + result);
}
}
public static void main(String[] args) {
Calculation calc = new Calculation();
Calculation.Addition add = calc.new Addition();
Calculation.Subtraction sub = calc.new Subtraction();
add.add(10, 20);
sub.subtract(10, 5);
}
}
在上面的代码中,Addition
和Subtraction
均使用了Calculation.this
来引用外部类Calculation
的成员变量num
。
输出如下:
Result is: 180
Result is: -20
示例2
在下面的示例中,我们定义了一个MyThread
类,其中使用Thread.currentThread().getName()
获取当前线程的名称,并且在内部类MyRunnable
中使用MyThread.this.getName()
引用了外部类MyThread
的成员方法getName()
。
public class MyThread {
public void start() {
Thread t = new Thread(new MyRunnable());
t.start();
}
public String getName() {
return "MyThread";
}
class MyRunnable implements Runnable {
@Override
public void run() {
System.out.println("Thread name: " + Thread.currentThread().getName());
System.out.println("MyThread name: " + MyThread.this.getName());
}
}
public static void main(String[] args) {
MyThread mt = new MyThread();
mt.start();
}
}
在上面的代码中,当创建并启动MyThread
线程时,将会在内部类MyRunnable
中输出当前线程名称和外部类MyThread
的名称。
输出如下:
Thread name: Thread-0
MyThread name: MyThread
总结
ClassName.this
是内部类使用来引用外部类实例的关键字,可以用于解决内部类与外部类同名的问题,并且可以在内部类中继续访问外部类的成员变量和成员方法。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:浅析Java ClassName.this中类名.this关键字的理解 - Python技术站