アプリ版:「スタンプのみでお礼する」機能のリリースについて

Abc.javaでコンパイルすると、

Abc.classの他に、
Abc$1.class
Abc$2.class
が作成されます。
"$"これはどういった意味なのでしょうか?
また、何と読むのでしょうか?
ダラー?ドルマーク?

A 回答 (4件)

前の回答では答えになっていなかったので補足させてもらいます。


申し訳ないです。

javaのコードをコンパイルすると、classごとにコードを機械語に翻訳したものがclassファイルとして生成されます。
しかし、ここで問題になるのが、classの中にclassがあったら(内部クラス)どうするの?ということです。
ここで同じAbc.classにするわけにはいかないので、Abc$1.classとすることでAbc.classの中にあるけど、別のクラスであることを明記的に区別しているのではないかと思われます。
    • good
    • 1
この回答へのお礼

>ここで同じAbc.classにするわけにはいかないので、Abc$1.classとすることでAbc.classの中にあるけど、別のクラスであることを明記的に区別しているのではないかと思われます。

なるほど、別のクラスであることを明示的に区別(Abc$1.class)することだったのですね。あえて内部クラス名を書かないということですね。Tacosanの「名前のないクラス」によってAbc$1.classということになるというのが、気がかりだったのですが、わかりました。
ありがとうございます。

お礼日時:2008/12/15 17:25

本当にそのようなクラスファイルができるかどうかはソース Abc.java を見ないと分かりませんが....


さておき, これは #1 で言われるようにクラス Abc の内部クラスですね. クラス A が内部クラス B をもつ場合, この内部クラス B に対するクラスファイルは A$B.class という名前になります. でもって今の場合は Abc$1.class などとなっていますが, これは「名前のない内部クラス」に対応します. 当たり前ですが「1 という名前の内部クラス」ではありません.
ソースファイル上で最初にある「名前のない内部クラス」に対するクラスファイルが Abc$1.class, 2番目のやつが Abc$2.class, という感じだったかな.

この回答への補足

確かに、AのなかにBを持つ内部クラスがあります。
「名前のない内部クラス」というと、どういうことなのでしょうか?

補足日時:2008/12/15 17:19
    • good
    • 0

Abc$1.classは内部クラスを含むクラスをコンパイルしたときに


生成されるファイルです。
あっても、なんの問題はないかと思われます。
    • good
    • 0

http://www.retrologic.com/innerclasses.doc7.html

Names of nested classes are transformed as necessary by the compiler to avoid conflicts with identical names in other scopes.
ネストされたクラスの名前はコンパイラにより必要に応じて他のスコープの識別子との衝突を区別するよう,変換される。

Names are encoded to the virtual machine by taking their source form, qualified with dots, and changing each dot `.' after a class name into a dollar sign `$'.
(クラスの)名前は仮想マシンによって
ソース内でのドットで修飾されている形をとったものに対して,各クラス名の後ろにつくドットをダラーに変更したものへとエンコードされる。

(後略、っつーか理解できるけどうまく日本語にできなかった)

公式ドキュメントを調べたわけじゃないが,上の記事ではそう紹介されている
    • good
    • 0
この回答へのお礼

$ダラーの意味がわかりました。
ありがとうございます。

お礼日時:2008/12/15 17:13

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!