9

回答: このスレッドの一番上の回答は、基本的に私の質問に答えます


privateこのメソッドで値を返す必要がないのはなぜでしょうか?

public class Test {
  private String testLoop() {
    while(true) { }
  }
  public static void main(String[] args) {
    Test test = new Test();
    test.testLoop();
  }
}

これはコンパイルしてはいけない気がします。ただし、正常にコンパイルされます。これはどこで合法であると定義されていますか?

このコンテキストでは、メソッドを次のように変更するのは奇妙だと思います。

private String testLoop() {
  while(true) { 
    if(false == true) { 
      break;
    }
  }
  return null;
}

javap、コンパイラがtestLoop.

では、Java コンパイラーは、メソッドが実際に戻り値を必要とするかどうかをいつ、どのように判断するのでしょうか?


残念ながら、停止の問題に言及した回答は削除されました。Javaコンパイラは、一般的な設定ですべての可能なループを見つけることができないため、上記の例のようなメソッドのトレースに力を入れていないと思います.

4

5 に答える 5

4
private String testLoop() {
    while(true) { }  //infinite loop
}

無限ループがあるため、上記のメソッドは決して戻りません。したがって、リターンを期待していないか、リターンに到達することはありません。

于 2013-11-13T11:35:18.133 に答える
1

あなたのwhileループwhile(true) { }は決して終わらないので、コンパイラはreturnステートメントを期待していません.コンパイラがループが終了することを発見した場合、returnステートメントを期待します.手動でテストできます.int i=1;while(i<0)これで試してみるとコンパイルエラーが発生し、コンパイラが尋ねます.ステートメントを再実行する

于 2013-11-13T11:34:41.083 に答える
1

方法

private String testLoop() {
    while(true) { }
}

コンパイル中に実際にはリターンポイントがありません。つまり、コンパイル時にリターンを「探す」時間は決してありません..

もちろん、これは良い方法ではありません。空のサイクル、特にtrue条件付きのサイクルは、IDE でエラーとして表示されるはずです。

于 2013-11-13T11:39:19.870 に答える
0

while(true) { } は、あなたが書いたそれ以上のステートメントを実行させません

private String testLoop() {
        while(true) { }
         //any code at this point is not reachable since it wont come out of while loop. So return statement just like any java code wont be reachable.
      }
于 2013-11-13T11:38:50.240 に答える
-4

testloop メソッドを呼び出し、戻り値を必要としない....このように記述した場合、プライベート メソッドは何かを返す必要があります。

String result = test.testloop();
于 2013-11-13T11:31:53.293 に答える