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

yizhihongxing

浅析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日

相关文章

  • Win11右键没有文本文档怎么办?Win11右键没有文本文档的解决方法

    Win11右键没有文本文档怎么办?在Win11系统中右键菜单中可能没有“新建文本文档”选项,出现这种情况可能是因为系统设置的问题或者是文件关联错误导致的。以下是Win11右键没有文本文档的解决方法及操作攻略。 方法一:更改注册表 按下Win+R键,打开运行窗口,输入“regedit”并回车打开注册表编辑器。 找到以下注册表项: HKEY_CLASSES_RO…

    other 2023年6月27日
    00
  • 我教你学之注册表清理

    我教你学之注册表清理 本文将为你讲解如何利用注册表清理工具清理 Windows 系统中无用的注册表项。这将有助于提高系统运行效率,加快系统速度。 什么是注册表? Windows 操作系统中,保存系统配置信息的一个重要组成部分就是注册表。从我们日常使用计算机的角度来看,注册表可以理解为是一个“配置文件”,里面存储了非常多的系统和应用程序的配置信息。 为什么需要…

    other 2023年6月25日
    00
  • Vue项目打包并部署nginx服务器的详细步骤

    下面是Vue项目打包并部署nginx服务器的详细步骤: 1. 打包Vue项目 首先,我们需要使用Vue提供的打包工具将项目打包成静态文件。进入Vue项目所在文件夹,执行以下命令: npm run build 这个命令会在项目根目录下生成一个 dist 文件夹,里面包含了所有的静态文件。 2. 安装nginx 在部署前,首先要确保服务器上已经安装了nginx …

    other 2023年6月27日
    00
  • 设置Win10文件资源管理器默认打开“这台电脑”

    下面是“设置Win10文件资源管理器默认打开“这台电脑”的完整攻略”,包括基本原理、实现方法和两个示例说明。 基本原理 在 Windows 10 中,文件资源管理器默认打开的位置是“快速访问”窗格。如果您想将其更改为“这台电脑”,可以按照以下步骤进行操作: 打开文件资源管理器。 在左侧导航栏中选择“这台电脑”。 单击“文件”选项卡,然后单击“更改文件和文件夹…

    other 2023年5月5日
    00
  • linux查看目录大小及硬盘大小

    要查看 Linux 系统中目录的大小以及硬盘的总大小,可以使用以下的方法: 查看当前目录的大小 要查看当前目录的大小,可以使用 du 命令。du 命令用于计算文件或目录占用的磁盘空间,它可以递归显示指定目录的大小,并可控制显示单位的大小。 命令格式如下: du -h –max-depth=1 其中,-h 表示以可读性较好的方式显示出文件大小。–max-d…

    other 2023年6月27日
    00
  • 如何将win11鼠标左右键改回原来的 Win11鼠标左右键设置教程

    针对这个问题,我会给出完整的Markdown格式文本攻略如下: 如何将win11鼠标左右键改回原来的Win11鼠标左右键设置教程 在Win11系统升级后,有些用户反映Win11的鼠标左右键设置与之前的不同,这让他们感到不适应。本教程将介绍如何将Win11鼠标左右键设置改回原来的状态。 步骤一:打开设置 点击屏幕左下角的“开始”按钮,选择“设置”图标,并打开W…

    other 2023年6月27日
    00
  • ps怎么设计毛绒文字? ps绒线字体的设计方法

    如何设计毛绒文字: 首先在Photoshop中新建一个空白文档,选择要使用的背景颜色。然后选择文本工具,在画布中输入要设计的文字。 选择要使用的字体,并将其放大到适当的大小。推荐使用cursive或handwriting风格的字体,这些字体更加适合做毛绒效果。 将字体转换为形状。选中文本图层,在顶部菜单中选择“type”->“convert to sh…

    other 2023年6月27日
    00
  • Android 实现夜间模式的快速简单方法实例详解

    Android 实现夜间模式的快速简单方法实例详解 在 Android 应用中实现夜间模式是一种常见的需求。本攻略将介绍一种快速简单的方法来实现夜间模式,并提供两个示例说明。 方法概述 实现夜间模式的方法是通过改变应用的主题来实现。我们将创建两个主题,一个用于日间模式,一个用于夜间模式。然后,根据用户的选择,动态地切换应用的主题。 步骤 以下是实现夜间模式的…

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