問題タブ [jls]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
java - JLS、Java、および関連テクノロジーの間にはどのような関係がありますか?
Javaは言語であり、JREはランタイム環境であり、JDKは開発ツールですか?JLSは、JREがx、y、zを実行する必要があることを示す仕様であり、したがってJavaをそれが何であるかを示します。これらの見解は正しいですか、そうでない場合、誰かが私を啓発することができますか?
Javaだと思うものはありますが、そうではありませんか?Androidについて聞いたと思いますが、本当ですか?
java - Java でのキャプチャ変換とは何ですか? 誰かに例を教えてもらえますか?
5.1.10 Capture Conversionの JLS の話に気付きましたが、それらが何であるかを理解できません。
誰かが私にそれらを説明したり、例を挙げたりできますか?
java - 数値昇格時に Java が byte および short オペランドを int に変換するのはなぜですか
Numeric Promotionプロセス中に小さなデータ型 (byte など) を int に拡張する理由は何ですか? これらの小さなデータ型に対してほとんどの操作を直接実行することは可能ではないでしょうか?
java - Javaで、なぜi ++++または(i ++)++を記述できないのですか?
ポストフィックス/プレフィックスイン/デクリメントを書き込もうとした後、ポスト/プレフィックスイン/デクリメントを書き込もうとすると、次のエラーが発生します。操作の引数が無効です++/--。
しかし、JLSによると:
と
だから書く:
可能であるはずです...何か考えはありますか?
java - Java でのインポートが不要な場合 (異常な修飾) [質問編集]
Java でエンティティを修飾する特別な方法がいくつかあることに気付きました。
この場合、Inner クラスを Outer クラスで修飾しているため、Outer クラスのみをインポートする必要があります。
このような事例は他にもありますか?(つまり、異常な修飾が発生する場所 - 異常とは、そうでないことを意味しますfullQualifier.identifier
)。
自動インポート (java.lang、プリミティブ型など) の場合は除外しています。
java - Javaでは、メソッド/コンストラクター宣言を別のメソッド/コンストラクター宣言内に表示できますか?
Javaでは、メソッド/コンストラクター宣言を別のメソッド/コンストラクター宣言内に表示できますか?例:
そうは思いませんが、安心していただきたいと思います。
java - enum 宣言以外の enum 型のインスタンスが多いことの欠点は何ですか?
列挙型を明示的にインスタンス化しようとすると、コンパイル時エラーになります
(§15.9.1)。Enum の final clone メソッドにより、enum 定数が複製されないことが保証され、シリアル化メカニズムによる特別な処理により、逆シリアル化の結果として重複するインスタンスが作成されないことが保証されます。列挙型の反射的なインスタンス化は禁止されています。これら 4 つのことにより、enum 定数によって定義されたものを超えて enum 型のインスタンスが存在しないことが保証されます。
enum 宣言以外の enum 型のインスタンスが多いことの欠点は何ですか?
java - 一時的なものとして識別されたvarargsを持つJavaメソッドはなぜですか?
私はJavaReflectionAPIで遊んでいて、可変引数リストを持つメソッドが一時的になることを観察しました。それはなぜですか、そしてtransient
この文脈でキーワードは何を意味しますか?
Java用語集から、一時的:
フィールドがオブジェクトのシリアル化された形式の一部ではないことを示すJavaプログラミング言語のキーワード。オブジェクトがシリアル化されると、その一時フィールドの値はシリアル表現に含まれませんが、非一時フィールドの値は含まれます。
ただし、この定義はメソッドについては何も述べていません。何か案は?
出力:
java - Java定数をゼロで割ってもコンパイル時エラーが発生しないのはなぜですか?
重複の可能性:
1/0 は有効な Java 式ですか?
このコードがコンパイルされるのはなぜですか?
コンパイルされたクラス ファイルを見ると、B が 30 に評価され、A がまだ 7/0 であることがわかります。
私がJSLを理解している限り、ゼロで割る式は定数ではありません。
参照: JLS 15.28
私の上記の声明は、次の行によるものです。
コンパイル時の定数式は、プリミティブ型の値を表す式です
したがって、ゼロ除算はプリミティブ値に評価されません。
私が本当に理解していないのは、コンパイラがとにかくこれを許可する理由です? 明確にするために、上記のコードは「java.lang.ExceptionInInitializerError」でランタイムをクラッシュさせます
私のように、コンパイラは最終的な静的変数を定数として脅し、コンパイル時間を評価します。これは、コンパイラが既に A を評価しようとしたことを意味しますが、それはゼロによる除算であるため、そのまま通過させました。コンパイル時エラーなし。しかし、これは非常に奇妙に思えます...コンパイラは、それがゼロ除算であり、ランタイムがクラッシュすることを認識していますが、それでもコンパイルエラーにフラグを立てません!
誰かが私に理由を説明できますか?
java - 最終フィールドの初期化の安全性のテスト
JLSによって保証されているように、最終フィールドの初期化の安全性を簡単にテストしようとしています。私が書いている論文用です。ただし、現在のコードに基づいて「失敗」させることはできません。誰かが私が間違っていることを教えてもらえますか、それともこれが私が何度も何度も何度も実行しなければならないことであり、それからいくつかの不運なタイミングで失敗を見る必要がありますか?
これが私のコードです:
そして私のスレッドはそれを次のように呼んでいます:
私はこのシナリオを何度も実行しました。私の現在のループは10,000スレッドを生成していますが、これは1000、100000、さらには100万を使用しています。それでも失敗はありません。両方の値に常に3と4が表示されます。どうすればこれを失敗させることができますか?