[解決済み] Javaです。ステートメントではありません
質問
これは、何よりも言語理論に関する質問だと思います。なぜmainの最初の文は合法で、2番目の文は合法でないのでしょうか?それらは同じものであると評価されないのでしょうか?
public class Main {
public static void main(String[] args) {
foo();
0;
}
public static int foo(){
return 0;
}
}
解決方法は?
Java では、いわゆる "式文" で使用できる式の種類を制限しています。副作用の可能性がある、意味のある式のみが許可されます。このため、次のような意味不明な文は許可されません。
0;
または
a + b;
. これらは単に言語文法から除外されているだけなのです。
のような関数呼び出しは
foo()
は副作用を持つ可能性があり、通常は副作用を持つので、意味のない文とは言えません。コンパイラは
foo()
が実際に何かを行うかどうかをチェックする。関数を呼び出す
できる
は副作用があるので、構文的には有効です。
これは、C/C++とJavaの哲学的な違いを反映しています。Javaでは、死んだり意味のないコードになるような様々な構造を禁止しています。
return;
foo(); // unreachable statement
CとC++は比較的自由放任主義です。好きなように書いてください。
から引用しています。 Java 言語仕様書、§14.8 式言語ステートメント :
ある種の式は、その後に続くことでステートメントとして使用することができます。 はセミコロンで囲みます。
ExpressionStatement: StatementExpression ; StatementExpression: Assignment PreIncrementExpression PreDecrementExpression PostIncrementExpression PostDecrementExpression MethodInvocation ClassInstanceCreationExpression
expression文は、式を評価することで実行されます。 式が値を持つ場合、その値は破棄されます。
式文の実行が正常に終了するのは、以下の場合のみです。 式の評価が正常に終了した場合。
CやC++とは異なり、Javaプログラミング言語では、特定のものしか使用できません。 を式文として使用することができます。ただし Java プログラミング言語では、void へのキャスト(" cast to void")は許可されていません。 は型ではないので、伝統的なC言語のトリックである式 というような文があります。
(void)... ; // incorrect!
は動作しません。一方、プログラミング言語であるJavaでは は、最も有用な種類の式をすべて式文に含めることができます。 また、式として使用されるメソッドの呼び出しは必要ありません。 ステートメントで void メソッドを呼び出すことはほとんどないので、このようなトリックはほとんどありません。 が必要です。トリックが必要な場合は、代入文(15.26節)か やローカル変数宣言文 (14.4節) で代用することができます。
関連
-
[解決済み] Application startメソッドで例外が発生する。JavaFx 11
-
[解決済み] eclipseからTomcatに物理的に発行されるmyjspはどこにあるのでしょうか?
-
[解決済み] JavaでInputStreamを読み込んでStringに変換するにはどうすればよいですか?
-
[解決済み] JavaでNullPointerExceptionを回避する方法
-
[解決済み] JavaにおけるHashMapとHashtableの違いは何ですか?
-
[解決済み] Java Mapの各エントリを効率的に反復処理するには?
-
[解決済み] Javaでメモリーリークを発生させるにはどうしたらいいですか?
-
[解決済み] JavaでArrayListではなくLinkedListを使用するのはいつですか?
-
[解決済み] JavaでStringをintに変換するにはどうしたらいいですか?
-
[解決済み] リファレンス - このシンボルはPHPで何を意味するのですか?
最新
-
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 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] 未処理の例外タイプIOException」が表示されるのですが?
-
[解決済み] Firebase クラスにシリアライズするプロパティが見つからない
-
[解決済み] java.lang.ClassCastException: java.util.Arrays$ArrayList は java.util.ArrayList にキャストできません。
-
[解決済み] Java UnknownFormatConversionException
-
[解決済み] 要素 'beans' の宣言が見つかりません。
-
[解決済み] アクティビティに割り当てられない
-
[解決済み] init-paramとcontext-param
-
[解決済み] java.sql.SQLRecoverableException: IO エラーです。NL Exceptionが発生しました
-
[解決済み] JavaFX 同じパッケージ内なのに「場所が必要です。
-
[解決済み] Spring ApplicationContext - リソースリーク: 'context' が閉じられない