2017-11-22 13 views
0

.javaファイルに複数のトップレベルクラスがある場合、そのクラスは1つの最上位パブリッククラスを持つことができ、他のすべてのトップレベルクラスはパブリックにすることはできません。javacが非公開の各トップレベルクラスに対して `.class`ファイルを作成しているのはなぜですか?

このような.javaファイル(たとえばjavac my.java)をコンパイルすると、最上位クラスごとに.classというファイルが作成されています。 1つのトップレベルクラスを除くすべてが非公開であるため、非公開のトップレベルクラスごとに.classファイルが作成されるのはなぜですか?

ありがとうございました。

+0

内部およびネストされたクラスがあるときに何が生成されるのか調べましたか?たぶんあなたはパターンを見ることができます。 – Kayaman

+0

内部クラスとネストされたクラスには '.class'ファイルがありません。 – Ben

+0

@Benそれを試してみてください。 (彼らは別のクラスファイルを持っています) –

答えて

3

各クラス・ファイルは、単一のクラス、インターフェイス、またはモジュールの定義が含まれています。

視認性はこれに影響しません。

2

フリップマンの答えは「あなたは何をすると思われますか?」です。各.classファイルには、実行するJVMのバイトコードが含まれています。Java仕様では、コードで定義された各クラスが.classファイルになる必要があります。

もっと一般的には、クラス(パブリック、プライベート、インナー、匿名など)の可視性は、コンパイラとJVMによって強制されることに注意してください。ファイルの可視性や存在によってではありません。 JVM specから

関連する問題