Java中的这种语法是什么?我不承认

时间:2009-10-27 20:49:45

标签: java syntax

这是一个语法问题。

我正在查看一些开源文件,我遇到了一些我无法识别的语法,我希望你能为我清除它。

(这取自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是什么?这个语法的名称是什么,它用于什么?

8 个答案:

答案 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