Двоеточие после имени класса в Java, что для

У меня есть вопрос о двоеточии в коде 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

протестировано на windows 7 с jdk1.8.0_25 и maven-3.2.3

1 ответ

Решение

Идентификатор, за которым следует двоеточие, - это просто метка. У вас нет помеченных операторов break, поэтому они бесполезны и ничего не значат для вашей программы.

Эти 3 утверждения с двоеточием эквивалентны просто showMsg(text), так InnerShow показывается каждый раз.

Другие вопросы по тегам