2009-04-13 7 views
50

私はa path finding tutorialを見ていると私はvoidメソッド(クラスPathTest、ライン126)の内側にreturn声明に気づいた:私は、Javaの初心者だreturnキーワードはJavaのvoidメソッドで何をしますか?

if ((x < 0) || (y < 0) || (x >= map.getWidthInTiles()) || (y >= map.getHeightInTiles())) { 
    return; 
} 

。誰が私にそれがなぜあるのか教えてもらえますか?私が知る限り、voidメソッド内のreturnは許可されていません。

答えて

94

その時点でメソッドを終了します。 returnが実行されると、残りのコードは実行されません。

例えば、コンパイラはあなたにいくつかのコードを伝えるには十分にスマートであることを

public void test(int n) { 
    if (n == 1) { 
     return; 
    } 
    else if (n == 2) { 
     doStuff(); 
     return; 
    } 
    doOtherStuff(); 
} 

注意が到達することができません:あなたはvoidメソッドでreturnを持つことができ

if (n == 3) { 
    return; 
    youWillGetAnError(); //compiler error here 
} 
+4

私はあなたのコードが説明的であると理解しますが、親の情報については理解しています。私は、それぞれのメソッドが1つのreturn文しか持たないと信じている人々と協力してきました。私はそれらの1つではありませんが、コードを実行するのが醜いことなく、できるだけリターンの数を最小限に抑えることを信じています。 – digitaljoel

+2

ええ、それは間違いなく過度に使用するものではありませんが、時にはそれはずっと簡単になり、それでもなお読みやすいものになります。 – CookieOfFortune

+2

ネストされたループを壊す好きな方法:) –

22

、あなただけ(任意の値を返すことはできません。 return 5;のように)、そのため彼らはの空き文字列と呼びます。 returnステートメントで明示的にvoidメソッドを終了する人もいますが、必須ではありません。それしかし、早期の機能を残すために使用することができます:

void someFunct(int arg) 
{ 
    if (arg == 0) 
    { 
     //Leave because this is a bad value 
     return; 
    } 
    //Otherwise, do something 
} 
12

Java言語specificationは、あなたのメソッドがvoidを返す場合は、全く発現してリターンを持つことができると言います。

2

戻り値は何もないので、何も返さない点を除いて、指定されたパラメータを持つ関数の戻り値と同じように機能し、呼び出し元のメソッドに制御が戻されます。

2

関数を終了して何も返しません。それはキーワードが単に関数呼び出しの次の行に制御を戻すコールスタックからフレームをポップ1.

14

整数を返すので、return 1;よう

何かが間違っているでしょう。

+6

ハハ。これは素晴らしい答えですが、私はJavaの初心者が本当にあなたが何を言おうとしているのか理解していないだろうと思っています。 – franklin

1

この例を参照して、条件付きでリストに追加します。単語 "return"がなければ、すべてのifが実行され、ArrayListに追加されます!

Arraylist<String> list = new ArrayList<>(); 

    public void addingToTheList() { 

    if(isSunday()) { 
     list.add("Pray today") 
     return; 
    } 

    if(isMonday()) { 
     list.add("Work today" 
     return; 
    } 

    if(isTuesday()) { 
     list.add("Tr today") 
     return; 
    } 
} 
+0

ArrayListは以下のように初期化されているはずです:ArrayList list = new ArrayList <>(); –

関連する問題