“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
语句时,第二次传递它(因为return
在if
语句中)。 因此,这就是IO在日志文件中包含这两个语句的原因。