class name in java 后的冒号是做什么用的
colon after class name in java what is for
我对 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 代码中的冒号有疑问,在下一段代码中,行 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
。