2

我对 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 上测试

4

1 回答 1

4

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

这 3 个带冒号的语句相当于 just showMsg(text),因此InnerShow每次都显示。

于 2016-01-22T17:44:38.850 回答