私はvoid
メソッドは値を返しませんが、私はまだどのようにここでは「戻る」声明で「無効」作業できるのでvoidメソッドの終了時に返り値はどういう意味ですか?
void nothingDohere() {return;}
のようなコードを書くことができることを知っていますか?
私はvoid
メソッドは値を返しませんが、私はまだどのようにここでは「戻る」声明で「無効」作業できるのでvoidメソッドの終了時に返り値はどういう意味ですか?
void nothingDohere() {return;}
のようなコードを書くことができることを知っていますか?
値のないreturn文ができのみは(void
方法で使用することやコンストラクタ)を呼び出すだけで、単に "今すぐメソッドから抜け出す"という部分を返すだけです。呼び出し側 に利用できる方法で計算値を作る
finally
ブロックを経由して):リターンでの値文は二つの目的を持ったのだと思います void
メソッドのreturn文は、これらのうちの最初のものを単純に達成します。 2番目の方法はvoid
メソッドでは意味がありません。 Java言語仕様のsection 14.17から
:なし式で
return文は、(任意の値を返すことはない、voidキーワードを使用して、宣言されたメソッドの本体に含まれている必要があり§8.4 )、またはコンストラクタの本体(8.8)にあります。コンパイル時エラーは、インスタンス初期化子または静的初期化子(8.7)内にreturn文がある場合に発生します。 Expressionを持たないreturn文は、それを含むメソッドまたはコンストラクタの呼び出し側に制御を移そうとします。 正確には、式を持たないreturnステートメントは、値が返されないため、常に突然完了します。
return文には引数がないため、何も返されないため、戻り値は 'void'です。
returnステートメントが実行されたときにメソッドのどの時点でも、単純にメソッドから終了します。ここでは、ここでメソッドの実行を終了するだけです。
あなたはvoidメソッドの例から何か(いくつかの値)にしようとしない場合return"xzy";
あなたはcomplitionエラーを取得しますVoid methods cannot return a value
return
ステートメントを使用して、実行をこのメソッドの呼び出し元に戻すこともできます。したがって、return文は、それが実行されたメソッドを直ちに終了します。
したがって、あなたのサンプルコード:
void nothingDohere() {
return ;
}
は、メソッド呼び出しを終了し、メソッドの呼び出し元にすぐに戻ります。
あなたが言ったケースでは、実際にはリターンは意味的に余分です(構文的に必要ですが、Javacはこのリターンなしではコンパイルされません)。戻り値はメソッドを終了します。しかし、場合によっては、メソッド内に複数の終了点を持つことを望む場合があります。このように:
public void doDifferentThings(){
if(){
//something done
return;
}
else{
//something else done
return;
}
}
いくつかは、しかし、それはあなたのコードクリーナーを維持することができ、この悪いデザインは、(一点の出口に反する)を検討してください。
単純に、それはプログラムがそのメソッドを呼び出した位置にvoidメソッドの内部から返されます。
public calss Test
{
private boolean flag = true;
public Test()
{
... // (1)
... // (2)
voidMethod(); // (3)
... // (7)
... // (8)
}
private void voidMethod()
{
... // (4)
... // (5)
if(flag) return; // (6)
...
...
}
}
あなたが関数から戻ると、あなたが返す関数を呼び出す関数に制御を返します。値を返すと、呼び出し側の関数がその値を取得します。そうでないと、呼び出し側の関数は制御を取得します。
私は公式にジョンスカートを打つことができないことを保証することができます。 –
このような簡単な質問の説明は素晴らしいですよ! @ Jonあなたはstackoverflowでここに与えたすべての答えの本を出版することができます、または書籍かもしれません。 :-) – kaps
@kaps:私の次の本は、「開発に関する私の考え」の脳のダンプになりそうです:) –