Двоеточие после имени класса в 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
показывается каждый раз.