“return”会停止执行方法吗?

我用以下方式编写了一个方法:

if (something) { return 1; } the rest of the code 

在我看来,该方法返回1,然后执行the rest of the code 。 真的可以吗? 不return停止执行代码。 它不是,我怎么强迫一个方法停止?

添加

这是代码(根据要求):

  for (int i=availableTime; i>0; i=i-1) { final int sec = i; SwingUtilities.invokeLater(new Runnable() { public void run() { String lbl = ""; lbl += ""; timeLeftLabel.setText(lbl); } }); try {Thread.sleep(1000);} catch (InterruptedException e) {} parameterFromClientsListener = clientsListener.getValue(userName,parameterToGet); if (!parameterFromClientsListener.equals("null")) { output = parameterFromClientsListener; game.log.fine(userName + " set (by button) " + parameterToGet + " to be equal to " + output + " . [IMPORTANT]"); return output; } } game.log.fine("The partner selection phase is expired."); // This code is executed if the Submit button was not pressed and the time run out. if (parameterToGet.equals("partner")) { tellMyChoice(parameterToGet, this.partnerFromForm, "timer of" + field); output = this.partnerFromForm; } game.log.fine(parameterToGet + " was submitted by timer (not by OK button)."); } else { output = parameterFromClientsListener; } game.log.fine(userName + " set (by timer)" + parameterToGet + " to be equal to " + output + " . [IMPORTANT]"); return output; } 

我运行这个代码两次。 在每种情况下,我都会生成一个日志文件。 在两个日志文件中,我都看到“set(by button)”语句(在return之前是直接的)。 但问题是在第二个日志文件中我确实看到了“计时器”语句。 如果达到“设置(按钮)”,则不应该达到。 怎么会这样? 我需要提一下,“设置(按钮)”和“计时器”不会出现在我的代码中的任何其他位置(它们只出现一次)。

增加3

从代码中可以看出我没有finally语句。

事实并非如此,return语句将停止以下任何代码。 (唯一的例外是return语句位于try {}块中,后面有一个finally {}块。

  if(0==0){ return; } System.out.println("This will not print."); 

return确实结束了方法的执行。 有一个例外:finally块。 在下列情况下,将返回2

 public int foo() { try { return 1; } finally { return 2; } } 

返回确实结束了方法的执行。 检查您的其他假设。 也许代码的其他部分中的某些内容无法正常运行。

返回是否会停止执行代码

好吧,差不多。

一旦遇到返回,就停止方法执行,并在执行任何finally子句后将控制传递给调用方法。

 int add(int a, int b) { try{ if(a == 0) { return b; } if(b == 0) { return a; } return a+b; } finally { System.out.println("Finally"); } } 

在上面的代码中,函数被称为add(0,1),“Finally”仍将被打印。

如何强制方法停止?

或者退出方法的其他方法是什么?

例外

你写

 if (!parameterFromClientsListener.equals("null")) { output = parameterFromClientsListener; game.log.fine(userName + " set (by button) " + parameterToGet + " to be equal to " + output + " . [IMPORTANT]"); return output; } 

您正在将字符串(或其他)与字符串"null" ,如果它们不同则返回。 你真的想这样做,而不是parameterFromClientsListener != null

(虽然这不应该是一个很大的区别,只要parameterFromClientsListener既不是null也不是"null" ,如果它是null ,你的版本会给出NullPointerException。)

你真的在日志文件中得到了这个条目吗? 如果是这样,你也应该得到回报。

我想了解观察到的行为是如何可能的。 更详细地说,我看到了一种“矛盾”的行为。 在我的日志文件中,我看到了return之前发生的行的输出以及返回后代码生成的输出。 所以,我假设return不会停止程序的执行。 正如其他“回答者”在这里正确提到的那样,这种假设是错误的。 行为的解释是微不足道的。 我的程序多次运行显示的代码。 它第一次到达return语句时,第二次传递它(因为returnif语句中)。 因此,这就是IO在日志文件中包含这两个语句的原因。