Java

【java】$1.classは無名(匿名)クラス!?$の意味に関して

$1のクラスファイルが作成された!?

javaファイルをコンパイルしたら

(javaのファイル名)$1.class

というクラスファイルが作成されてしまった!

例えば

  • javatest.java

をコンパイルをしたら

  • javatest.class
  • javatest$1.class

という2つのクラスが作成された

$1って何?ゴミかな?

結論

タイトルにもあるように

javaソースコードの中に

無名クラス

が宣言されているはずです。
(※匿名クラスとも呼びます)

そのため、

コンパイルすると

(javaのファイル名)$1.class

というクラスファイルが作成されます。

すなわち

$1のクラスファイルはゴミではなく

プログラムの一部です

$という表記について

そもそも$って何?

って疑問もあると思います

これは

内部クラス

を表します

内部クラスとは

クラスの中に定義されているクラス

のことを言います。

内部クラスがあった場合

(javaファイル名)$(内部クラス名).class

というように作成されます。

内部クラスの例

例えば

javatest.java

の中に

innertest

という内部クラスの定義があった場合、

コンパイルすると

  • javatest.class
  • javatest$innertest.class

という2つのクラスが作成されます

無名クラスは内部クラスの1種

無名クラスは

内部クラスの中の1種類に過ぎません。

内部クラスには3種類あり

  1. メンバークラス
  2. ローカルクラス
  3. 無名クラス

の3種類が存在します。

無名クラスは文字通り

「名前がないクラス」

です。

javaのコンパイルの仕様として
名前が無い場合は「1」を付与するようになってます。

そのため

クラス名に

1

と名前が振られ

$1.class

というファイルが作成されたわけです。

$は内部クラスを表す

$1は無名クラスを表す

中級者への道

最初の疑問は

$1って何?ゴミなの?

という素朴な疑問でしたが、

少し思考を先に進めると

  • コンパイルにおける$の意味は?
  • $1の意味は?

になりました。

更に深堀すれば

  • 匿名クラス/無名クラスとは?
  • 内部クラスとは?

となり、

更に更に深堀すると

  • 内部クラスってどんなものがあるの?
  • 内部クラスはどういう時に使うの?

と調べていけば、これだけで

Javaに詳しい人

に1歩近づきます

最初は超初心者みたいな疑問ですが

掘り下げていく

中・上級者への道が開けていきます

(更にいえば次にコーディングするときに内部クラスを使用してコーディングするとなお良し!)

素朴な疑問を掘り下げる

参考

内部クラスって何?

匿名クラスって何?

と知りたい人は以下を参考にしてください。

【Java】インナークラス(内部クラス)って何?概要から使い方まで解説

Javaの匿名クラス(無名クラス)の使い方【初心者向け】

広告




関連記事