代码之家  ›  专栏  ›  技术社区  ›  special0ne

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

  •  3
  • special0ne  · 技术社区  · 15 年前

    这是一个语法问题。

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

    (这是从Rhino调试器中的main.java获取的 here )

    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 回复  |  直到 15 年前
        1
  •  16
  •   matt b    15 年前

    它们是标签。它们过去可以从一个内部的块中分离出来,形成一个不在它周围的块。

    Here is the relevant part of the Java Language Specification 这涉及标签。

    你可能以前没见过它,因为99%的时间代码可以被重写以避免使用这样的东西,这可能是该方法做得太多的迹象。

    (我还应该提到,任何一个碰巧从搜索引擎中看到这个问题/答案的人,它不是 新的 语法-从JLS的第一个版本开始就有了。)

        2
  •  4
  •   Troy    15 年前

    让我想到下面的脑筋急转弯:

    public class Main {
        public static void main(String[] args) {
            http://stackoverflow.com
            System.out.println("Does it?");
        }
    }
    

    它编译吗?

    编辑:所以语法荧光笔做得太好了!

        3
  •  3
  •   BobbyShaftoe    15 年前

    这只是一个分支语句 goodUsage 只是一个标签。请参见这里:

    http://java.sun.com/docs/books/tutorial/java/nutsandbolts/branch.html

        4
  •  2
  •   user197643    15 年前

    它被称为有标签的中断。它可以用来指定您希望中断哪个循环,而不是像通常那样最内部的循环。下面是一个很好的例子: http://java.sun.com/docs/books/tutorial/java/nutsandbolts/branch.html

        5
  •  1
  •   Andrew Hare    15 年前

    它是一个标签-break语句提供标签,这意味着它将被视为 goto 除了在Java中,“破解标签”会把你带到 结束 标签后声明的块。

        6
  •  1
  •   Kaivosukeltaja    15 年前

    这叫做标签。它允许您指定要中断的循环。

        7
  •  0
  •   Nick    15 年前
        8
  •  0
  •   Gaël Marziou    15 年前

    这是一个标签,见Wikepedia article