由於每個類都會生成一個
class文件
用於容納與如何創建這個類型的對象有關的所有信息(這種信息產生了一個名為Class對象的元類)
所以大家或許會猜到內部類也必須生成相應的
class文件
用來容納與它們的Class對象有關的信息
這些文件或類的名字遵守一種嚴格的形式
先是封裝類的名字
再跟隨一個$
再跟隨內部類的名字
例如
由InheritInner
java創建的
class文件包括
InheritInner
class
WithInner$Inner
class
WithInner
class
如果內部類是匿名的
那麼編譯器會簡單地生成數字
把它們作為內部類標識符使用
若內部類嵌套於其他內部類中
則它們的名字簡單地追加在一個$以及外部類標識符的後面
這種生成內部名稱的方法除了非常簡單和直觀以外
也非常
健壯
可適應大多數場合的要求(注釋③)
由於它是Java的標准命名機制
所以產生的文件會自動具備
與平台無關
的能力(注意Java編譯器會根據情況改變內部類
使其在不同的平台中能正常工作)
③
但在另一方面
由於
$
也是Unix外殼的一個元字符
所以有時會在列出
class文件時遇到麻煩
對一家以Unix為基礎的公司——Sun——來說
采取這種方案顯得有些奇怪
我的猜測是他們根本沒有仔細考慮這方面的問題
而是認為我們會將全部注意力自然地放在源碼文件上
From:http://tw.wingwit.com/Article/program/Java/hx/201311/26593.html