浅析Java ClassName.this中类名.this关键字的理解

浅析Java ClassName.this中类名.this关键字的理解

在Java中,当类中有内部类的时候,在内部类中可能会出现与外部类同名的成员变量或方法,此时就需要使用类名.this关键字来引用外部类的成员。

定义

ClassName.this可以指向外部类的实例。在内部类中使用ClassName.this引用的是外部类的实例对象。

示例1

在下面的示例中,我们定义了一个Calculation类,其中定义了两个内部类AdditionSubtraction,并且在内部类中使用了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);
    }
}

在上面的代码中,AdditionSubtraction均使用了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技术站

(0)
上一篇 2023年6月27日
下一篇 2023年6月27日

相关文章

  • 在Python下进行UDP网络编程的教程

    在Python下进行UDP网络编程的教程 在Python下进行UDP网络编程,需要使用到Python内置的socket模块。socket模块提供了一种用于网络通讯的接口,能够方便地进行网络编程。 1. 创建UDP Socket 要创建一个UDP Socket,需要使用socket.socket()方法,并指定socket.SOCK_DGRAM参数。示例如下:…

    other 2023年6月25日
    00
  • Android 布局文件Layout XML属性

    当我们在开发Android应用时,布局文件是非常重要的一部分。布局文件使用XML语言编写,用于定义应用界面的结构和外观。在布局文件中,我们可以使用各种属性来控制视图的位置、大小、样式等。下面是Android布局文件中常用的一些属性的详细说明: android:layout_width和android:layout_height:这两个属性用于设置视图的宽度和…

    other 2023年8月21日
    00
  • asp.net动态加载用户控件,关于后台添加、修改的思考

    一、介绍 在ASP.NET中,用户控件是一种可重用的界面组件,通过用户控件我们可以把常用的UI组件进行封装,使得我们可以重复使用,达到代码复用和代码维护的目的。 动态加载用户控件可以在运行时动态生成用户控件并且将其插入到页面中,非常的灵活方便。 在本文中,我们将利用ASP.NET提供的机制,通过动态加载用户控件实现后台添加和修改的需求。 二、流程 创建用户控…

    other 2023年6月26日
    00
  • 微信小程序 配置文件详细介绍

    下面是“微信小程序配置文件详细介绍”的完整攻略。 微信小程序配置文件详细介绍 引言 在微信小程序开发中,配置文件十分重要。配置文件可用于配置小程序的全局变量、页面路径、底部tabbar等功能,可以帮助我们更好的管理和维护小程序。接下来,我们将详细介绍微信小程序配置文件的使用。 全局配置文件 小程序的全局配置文件为 app.json,用于配置全局性的属性,如小…

    other 2023年6月25日
    00
  • Python内建类型float源码学习

    以下是Python内建类型float的源码学习的完整攻略: Python内建类型float源码学习 1. 查找源码 首先,我们需要找到Python内建类型float的源码。可以通过以下步骤找到: 打开Python官方网站(https://www.python.org/)。 导航到\”Downloads\”页面。 在\”Source code\”部分下载Pyt…

    other 2023年10月15日
    00
  • Win11右键菜单太大怎么办?Win11右键菜单大小调整方法

    以下是详细的Win11右键菜单大小调整方法完整攻略。 问题描述 在Win11系统中,当我们在桌面或文件资源管理器中右键点击时,弹出的右键菜单可能会显示得过大,这可能会影响我们使用电脑的效率和体验。那么,如何调整Win11右键菜单的大小呢? 方法一:使用“调整所有的菜单尺寸”选项 一种解决方法是通过Windows 11的“调整所有的菜单尺寸”选项来调整右键菜单…

    other 2023年6月27日
    00
  • win7系统ip地址冲突怎么解决? Win7显示ip地址冲突的三种解决办法

    Win7系统IP地址冲突解决攻略 当在Windows 7系统中遇到IP地址冲突时,可以采取以下三种解决办法来解决问题。下面将详细介绍每种解决办法,并提供两个示例说明。 解决办法一:重新分配IP地址 打开控制面板:点击开始菜单,选择“控制面板”。 进入网络和共享中心:在控制面板中,点击“网络和 Internet”,然后点击“网络和共享中心”。 打开适配器设置:…

    other 2023年7月31日
    00
  • vue-cli 环境变量 process.env的使用及说明

    vue-cli 环境变量 process.env的使用及说明 在Vue.js项目中,我们可以通过使用process.env来访问环境变量,这在不同的环境下可以用来指定不同的参数或配置。本文将详细讲解如何使用process.env来设置和访问环境变量。 process.env的基本用法 process.env是Node.js中的全局变量,可以用来访问系统环境变…

    other 2023年6月27日
    00
合作推广
合作推广
分享本页
返回顶部