break不能在循环外使用

Break can not be used out side of loop

for(int i = 0; i < 10; ++i) {
  outerTimer = new Timer() {
    @Override
    public void run() {        
      if(stopTimer) {
        cancel();
        break; // break cannot be used outside of a loop or a switch
      }

     repeatLoop();
    }         
  };

  outerTimer.run();
  outerTimer.scheduleRepeating(tmptimerDuration);
}

在上面的代码中,当 stoptimer 为真时,我使用 break 来中断循环,但它会抛出错误

break cannot be used outside of a loop or a switch 

但是我在定时器的 break 内部 中使用了这个,其中定时器在另一个 for 循环中。

那么为什么我会收到错误消息?

您可以有一个 final boolean 变量( 可以 从函数访问),并在您应该中断时将其值设置为 true。然后,在 for 循环中,您只需检查变量 true 和 break.

您的代码不起作用,因为 break 并不真正在 for 循环内,它在另一个范围内的匿名函数内。

匿名 classes 在编译时变成独立的 classes。以下代码大致等价:

class ContainingClass {
  void myMethod() {
    for(int i = 0; i < 10; ++i) {
      outerTimer = new MyAnonymousTimer();

      outerTimer.run();
      outerTimer.scheduleRepeating(tmptimerDuration);
    }
  }
}

class MyAnonymousTimer extends Timer {
  @Override
  public void run() {        
    if(stopTimer) {
      cancel();
      break; // break cannot be used outside of a loop or a switch
    }

   repeatLoop();
  }         
}

(名称 MyAnonymousTimer 不是 class 的实际名称;它更像 ContainingClass

因此,break 并不真正在循环中;您可以在循环中声明它只是语法上的方便。

您需要使用 return,就像停止执行任何其他 void 方法一样。

您看到 "break" 以图形方式位于循环内,但 "break" 确实位于不同的范围内。 这样 break 指令在内部范围内执行(注意每次迭代都有一个新指令)。

repeatLoop 有什么作用?因为我在考虑不同的解决方案,但我必须知道它的行为。