當我反匯編下面給出的代碼時,我注意到常量池中TestClass的匿名內部類顯示為'AnonymousTestApp$1',但它不應該是'TestClass$1'嗎?
編碼:
public class AnonymousTestApp {
public static void main(String[] args) {
TestClass tc = new TestClass(){
};
}
}
使用 Oracle JDK 17 編譯并使用“javap -c -p -v”進行反匯編。
uj5u.com熱心網友回復:
首先:該類的“名稱”實際上是無關緊要的,因為它是一個匿名名稱,即它是生成的,而不是讓開發人員知道或關心的。
第二:用于(由該編譯器使用,標準中AnonymousTestApp$1未定義)表示.AnonymousTestApp
TestClass$1如果匿名類是在TestClass.
想想這個問題:如果同一個包中的多個類創建同一個基類的匿名子類,它們將如何協調以避免名稱沖突?使用當前頂級類的名稱作為前綴可以避免這種潛在的沖突。
雖然$ 可以作為普通 Java 識別符號的一部分,但在 JLS 中明確不鼓勵使用它:
美元符號應僅用于機械生成的源代碼中,或者很少用于訪問遺留系統上預先存在的名稱。
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/530452.html
標籤:爪哇字节码爪哇
