这是一个语法问题。
我正在查看一些开源文件,我遇到了一些我无法识别的语法,我希望你能为我清除它。
(这取自Rhino调试器here中的Main.java)
public static String[] processOptions(String args[])
{
String usageError;
goodUsage: for (int i = 0; ; ++i) {
if (i == args.length) {
return new String[0];
}
String arg = args[i];
if (!arg.startsWith("-")) {
processStdin = false;
fileList.add(arg);
String[] result = new String[args.length - i - 1];
System.arraycopy(args, i+1, result, 0, args.length - i - 1);
return result;
}
if (arg.equals("-version")) {
if (++i == args.length) {
usageError = arg;
break goodUsage;
}
int version;
try {
version = Integer.parseInt(args[i]);
} catch (NumberFormatException ex) {
usageError = args[i];
break goodUsage;
}
我的问题是goodUsage
是什么?这个语法的名称是什么,它用于什么?
答案 0 :(得分:16)
他们是标签。它们习惯于能够将内部块分解成不是紧邻其周围的块。
处理标签的Here is the relevant part of the Java Language Specification。
你可能以前没有看过它,因为99%的时间代码都可以被重写为不使用这样的东西,这可能表明该方法做得太多了。
(另外我应该提到碰巧从搜索引擎遇到这个问题/答案的人,它不是新的语法 - 它自JLS版本之后就已存在。)
答案 1 :(得分:4)
让我想起以下脑筋急转弯:
public class Main {
public static void main(String[] args) {
http://stackoverflow.com
System.out.println("Does it?");
}
}
是否编译?
编辑:SO的语法荧光笔做得太好了!
答案 2 :(得分:3)
这只是一个分支声明,goodUsage
只是一个标签。见这里:
http://java.sun.com/docs/books/tutorial/java/nutsandbolts/branch.html
答案 3 :(得分:2)
它被称为标记中断。它可以用来指定你想要打破的循环,而不是像往常那样指定最里面的循环。这是一个很好的例子:http://java.sun.com/docs/books/tutorial/java/nutsandbolts/branch.html
答案 4 :(得分:1)
它是一个标签 - break语句提供标签,这意味着它将被视为goto
,除了在Java中“break to label”将带您进入 end 标签后声明的块。
答案 5 :(得分:1)
这称为标签。它允许您指定要突破的循环。
答案 6 :(得分:0)
答案 7 :(得分:0)
这是一个标签,请参阅wikepedia article