[解決済み] なぜJavaは "unreachable statement "というコンパイラーエラーが発生するのですか?
質問
プログラムをデバッグするとき、コードのブロックの中にreturn文を挿入すると便利なことがよくあります(間違いなく悪い習慣ですが)。私は Java でこのようなものを試してみるかもしれません ....
class Test {
public static void main(String args[]) {
System.out.println("hello world");
return;
System.out.println("i think this line might cause a problem");
}
}
もちろん、これではコンパイラーエラーが発生します。
Test.java:7: 到達不能なステートメント
未使用のコードを持つことは悪い習慣なので、警告が正当化されるかもしれない理由は理解できます。しかし、なぜこれがエラーを発生させる必要があるのか理解できません。
これは単にJavaがナニーであろうとしているだけなのか、それともこれをコンパイラーエラーにする正当な理由があるのでしょうか?
どのように解決するのですか?
到達不可能なコードはコンパイラにとって無意味だからです。コードを人々にとって意味のあるものにすることは、コンパイラーにとって意味のあるものにすることよりも重要かつ難しいことですが、コンパイラーはコードの本質的な消費者なのです。Java の設計者は、コンパイラにとって意味のないコードは誤りであるという見解をとっています。彼らのスタンスは、到達不可能なコードがある場合、それは修正される必要がある間違いを犯したということです。
ここにも似たような質問があります。 到達不能なコード: エラーか警告か? プログラマがコードの一部を書く場合、それは常に何らかのシナリオで実際に実行することを意図したものであるべきだ」と著者は述べています。
到達不可能なコードがコンパイルを妨げるべきかどうかは、決してコンセンサスが得られない問題です。しかし、これは Java の設計者がそれを行った理由です。
コメントで多くの人が、Javaがコンパイルを妨げない到達不可能なコードの多くのクラスがあることを指摘しています。もし私がゲーデルの結果を正しく理解しているならば、どんなコンパイラーも到達不可能なコードのすべてのクラスを捕らえることはできないはずです。
ユニットテストはすべてのバグをキャッチすることはできません。私たちは、その価値に対する議論としてこれを使用しません。同様に、コンパイラーはすべての問題のあるコードをキャッチすることはできませんが、それができるときに悪いコードのコンパイルを防止するために、それはまだ価値があります。
Java言語設計者は、到達不可能なコードをエラーと見なします。そのため、可能な限りそれをコンパイルしないようにすることは合理的です。
(downvoteする前に: 問題はJavaがunreachable statementコンパイラーエラーを持つべきかどうかではありません。問題は なぜ Javaはunreachable文のコンパイラエラーを持っています。Java が間違った設計上の決定をしたと思うからと言って、私にダウンヴォートをしないでください)。
関連
-
[解決済み] 非voidメソッドにreturnステートメントがない場合のコンパイル
-
Java の switch case 文で必要な定数式の問題の解決法
-
SocketException java.netの4つの例外解決策。
-
[解決済み] Javaはパラメータのデフォルト値をサポートしていますか?
-
[解決済み] ランダムな文字列を使用するこのコードは、なぜ "hello world" と表示されるのですか?
-
[解決済み] Javaの「for each」ループはどのように機能するのですか?
-
[解決済み] なぜJavaにはtransientフィールドがあるのですか?
-
[解決済み] 特定のUnicode文字を含むコメントでのJavaコードの実行が許可されているのはなぜですか?
-
[解決済み] Stringでswitch文が使えないのはなぜですか?
-
[解決済み】Javaではfinallyブロックは必ず実行されるのですか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
Eclipse問題 アクセス制限。タイプ 'SunJCE' が API でないことを解決し、/jdk ディレクトリにある /jre と jre の違いについて理解を深める。
-
javaの非静的メソッドを静的に参照することができない
-
ブートレイヤーの初期化中にエラーが発生しました java.lang.module.FindException: モジュールが見つかりません
-
スレッド "main" での例外 java.lang.ArrayIndexOutOfBoundsException:5 エラー
-
無効なメソッド宣言
-
SpringBoot 起動エラー java.nio.charset.MalformedInputException: 入力長 = 2 解決
-
git pull appears現在のブランチに対するトラッキング情報がありません。
-
java 365*1000*60*60*24 計算問題
-
アクセス制限の解決方法: ---- in Java
-
ApiModel と @ApiModelProperty の使用法