java - Java中类名后的冒号是做什么用的

标签 java colon scope-resolution

<分区>

我对 java 代码中的冒号有疑问,在下一段代码中 OuterClass:showMsg(text);OuterClass:InnerClass:showMsg(text); 行 没有错误,让我觉得冒号字符的工作方式有点像 C++ 中的双冒号(作用域解析),但运行后的输出给我留下了一个问题,冒号是干什么用的?

public class OuterClass {

    public void showMsg(String msg) {
        System.out.format("OuterShow : %s%n", msg);
    }

    public static abstract class InnerClass {        
        public abstract void command();
        public void showMsg(String msg) {
            System.out.format("InnerShow : %s%n", msg);
        }
    }

    public void someAction(){
        new InnerClass() {
            @Override
            public void command() {
                String text = "some text here";
                this.showMsg(text);
                OuterClass.this.showMsg(text);
                InnerClass:showMsg(text);
                OuterClass:showMsg(text);
                OuterClass:InnerClass:showMsg(text);
            }
        }.command();
    }

    public static void main(String[] args) {
        new OuterClass().someAction();
    }
}

输出:

    --- exec-maven ---
    InnerShow : some text here
    OuterShow : some text here
    InnerShow : some text here
    InnerShow : some text here
    InnerShow : some text here

在带有 jdk1.8.0_25 和 maven-3.2.3 的 Windows 7 上测试

最佳答案

后跟单个冒号的标识符只是一个 label .您没有任何带标签的 break 语句,因此它们是无用的,并且对您的程序没有任何语义意义。

这 3 个带有冒号的语句等同于 showMsg(text),因此每次都会显示 InnerShow

关于java - Java中类名后的冒号是做什么用的,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34952857/

相关文章:

php - 使用冒号访问变量的 Json 值 ( :) in between using Php

java - 改造 - 不同设备上的不同 API 响应

java - 如何在读取最后一个值时再次从文本文件中读取整数

java - 如何在 spring data elasticsearch 中添加 run-as header

batch-file - Windows 批处理语法 - 变量名称中冒号的含义

function - Lua:冒号、 'self' 和函数定义与调用

c++ - Pimpl、私有(private)类前向声明​​、范围解析运算符

c++ - 在 C++ 中,阴影变量名称的范围分辨率 ("order of precedence"是什么?

c++ - 如何调用与类成员同名的函数

java - Java 中的 StringBufferInputStream 问题