2016-03-23 2 views
0

以下のコードを考慮すると、ここでは正確に何が返されますか?どのメソッドやループがプログラムを終了させるのでしょうか?戻り値はループ内で正確に何をしますか?

myBooleanがtrueの場合、それがループを終了
void foo(){ 
    try{ 
     for (String a : myList){ 
      while(true){ 
       if (myBoolean) 
        return; 
      } 
     } 
    } catch (Exception e) { 
     } 
} 
+1

'return;'はラムダの内部を除いてどこでも同じです。 –

答えて

1

、および(考慮すべき例外なく)上で行っていた他のすべてとリターンがfoo()と呼ばれるものは何でも機能を制御します。

return;には、戻り値の型がvoidの関数が参照されます。返すものはないので、それはのにあるすべてのものを停止するだけです。

編集:ここで注意すべき

一つは、OPがtry-catchブロックを言及していることです。その代わりに、try-catch-finallyまたはtry-finallyブロックがあった場合、最初にそのfinallyブロックをヒットしてから復帰します。以下のスニペットでは、returnが評価されますが ですが、Hit finallyが印刷されています。試してみてください:)

try { 
    if (0 == 0) 
     return; 
} finally { 
    System.out.println("Hit finally"); 
} 

どうしてですか? finallyブロックはロックが解放される場所です。ロックが解除されずに制御が同期領域を離れることが許されている場合に起こるリソースの漏洩を防ぐために、はMUSTになります。

Aha。これも騙す方法があります。この無限ループを見てください。

while (true) { 
    try { 
     if (0 == 0) 
      return; 
    } finally { 
     continue; 
    } 
} 

これはこの質問には十分だと思います。私は今停止する。

+0

私の主な質問は、fooを終了するかどうかであった。私は答えを得た。ありがとう。 – solo

+0

@soloはい、ボス。それは確かにします。 :) –

+0

あなたは休憩を考えているかもしれないと思います; "return"はメソッドから完全に外れます。 Javaの多かれ少なかれ、ネストされたメソッドは決してありません。そのため、そこにあいまいさはありません。 –

0

returnは、メソッドがvoidを返す場合でも、条件が満たされたときに元の呼び出し元に戻ります。

0

return文に制御リーチは、それがいかなる例外なく、呼び出し側エンドに戻ります(それがcatchブロックに行くことはありません)、

が、中にあれば、あなたの参考のために私は、それをさらに追加しますケースfinallyブロックは、(私たちが知っているように最終的には、常にどのような場合に実行ブロックするので)それは

0

returnは、メソッドを終了しfinally ブロックを通じて呼び出し側エンドに戻らなければなりませんが あるfoo

whileループを終了する場合は、break(最も内側のループから外れます)を使用します。

あなたがラベルされたブレーク使い、forループから抜け出すにしたい場合:他のポスターはmyBooleanがtrueの場合、return文は最後までfoo()方法の原因となります、と述べてきたように

label: 
for (String a : myList) { 
    ... 
    break label; 
+0

ありがとうございます。私はラベルについて新しいことを学びました。 – solo

+0

問題ありません。時には便利ですが、使いすぎないようにしてください。 –

0

をし、 foo()というメソッドに戻るように制御します。

答えを広げるだけで、希望の動作に応じてループ内でbreakcontinueを使用することもできます。 breakステートメントは、ループの直後に実行を続けながらループを終了させます。

ループの次の繰り返しにスキップする場合は、continueを使用できます。

関連する問題