冒号后java中的类名是什么的

时间:2016-01-22 17:41:47

标签: java colon scope-resolution

我在java代码中有一个关于冒号的问题,在下一段代码中,行OuterClass:showMsg(text);和行OuterClass:InnerClass:showMsg(text);没有给出任何错误,让我觉得冒号字符有点像双冒号一样在C ++(Scope Resolution)中,运行后的输出给我留下了问题,冒号是什么?

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上进行了测试

1 个答案:

答案 0 :(得分:4)

后跟单个冒号的标识符只是label。你没有任何标记的break语句,所以它们没用,并且对你的程序没有任何语义意义。

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