有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!


共 (3) 个答案

  1. # 1 楼答案

    可以使用带标签的BREAK语句:

    search:
        for (i = 0; i < arrayOfInts.length; i++) {
            for (j = 0; j < arrayOfInts[i].length; j++) {
                if (arrayOfInts[i][j] == searchfor) {
                    foundIt = true;
                    break search;
                }
            }
        }
    

    然而,在正确设计的代码中,不应该需要GOTO功能

  2. # 2 楼答案

    虽然一些评论人士和反对者认为这不是goto,但从下面的Java语句生成的字节码确实表明,这些语句确实表达了goto语义

    具体来说,第二个示例中的do {...} while(true);循环由Java编译器优化,以避免评估循环条件

    向前跳

    label: {
      // do stuff
      if (check) break label;
      // do more stuff
    }
    

    字节码:

    2  iload_1 [check]
    3  ifeq 6          // Jumping forward
    6  ..
    

    向后跳

    label: do {
      // do stuff
      if (check) continue label;
      // do more stuff
      break label;
    } while(true);
    

    字节码:

     2  iload_1 [check]
     3  ifeq 9
     6  goto 2          // Jumping backward
     9  ..
    
  3. # 3 楼答案

    只是为了好玩,here是Java中的GOTO实现

    Example:

       1 public class GotoDemo {
       2     public static void main(String[] args) {
       3         int i = 3;
       4         System.out.println(i);
       5         i = i - 1;
       6         if (i >= 0) {
       7             GotoFactory.getSharedInstance().getGoto().go(4);
       8         }
       9         
      10         try {
      11             System.out.print("Hell");
      12             if (Math.random() > 0) throw new Exception();            
      13             System.out.println("World!");
      14         } catch (Exception e) {
      15             System.out.print("o ");
      16             GotoFactory.getSharedInstance().getGoto().go(13);
      17         }
      18     }
      19 }
    

    Running it:

    $ java -cp bin:asm-3.1.jar GotoClassLoader GotoDemo           
       3
       2
       1
       0
       Hello World!
    

    我是否需要添加“不要使用它!”