Java內(nèi)部類的全限定名規(guī)律代碼示例
簡述:
由于最近遇到不少需要反射的類,而其中不乏內(nèi)部類,在此總結(jié)一下內(nèi)部類的全限定名的規(guī)律。
成員內(nèi)部類
測試結(jié)果表明,無論成員內(nèi)部類是否為靜態(tài),其全限定名都使用如下命名方法:
包名.外部類名$內(nèi)部類名
測試代碼:
package com.test; public class InnerClassTest { static class StaticInner{ } class Inner{ } public static void main(String[] args) { StaticInner si = new StaticInner(); Inner in = new InnerClassTest().new Inner(); System.out.println(si.getClass()); System.out.println(in.getClass()); } }
打印結(jié)果:
classcom.test.InnerClassTest$StaticInner
classcom.test.InnerClassTest$Inner
匿名內(nèi)部類
匿名內(nèi)部類的全限定名滿足如下規(guī)律:
包名.外部類名$由1開始的正整數(shù)-按照類裝載順序依次排列
測試代碼
package com.test; public class InnerClassTest { static Object staticAnClass = new Object(){ } ; static Object staticBlockAnClass; static { staticBlockAnClass = new Object(){ } ; } Object anClass = new Object(){ } ; Object blockAnClass; { blockAnClass = new Object(){ } ; } public static void main(String[] args) { InnerClassTest functionClass = new InnerClassTest(){ } ; System.out.println(staticAnClass.getClass()); System.out.println(staticBlockAnClass.getClass()); InnerClassTest test = new InnerClassTest(); System.out.println(test.anClass.getClass()); System.out.println(test.blockAnClass.getClass()); System.out.println(functionClass.getClass()); } }
打印結(jié)果:
class com.test.InnerClassTest$1
class com.test.InnerClassTest$2
class com.test.InnerClassTest$3
class com.test.InnerClassTest$4
class com.test.InnerClassTest$5
局部內(nèi)部類
局部內(nèi)部類全限定名使用如下命名方式:
包名.外部類名$由1開始的正整數(shù)后跟局部類名-其中數(shù)字部分是局部類在外部類上下文出現(xiàn)的先后順序
測試代碼
package com.test; public class InnerClassTest { public static void main(String[] args) { functionA(); functionB(); } public static void functionA() { class Inner { } ; System.out.println(new Inner().getClass()); } public static void functionB() { class Inner { } ; System.out.println(new Inner().getClass()); } }
上例打印結(jié)果:
classcom.test.InnerClassTest$1Inner
classcom.test.InnerClassTest$2Inner
在測試代碼的基礎(chǔ)上在交換main中functionA、B位置后的結(jié)果:
classcom.test.InnerClassTest$2Inner
classcom.test.InnerClassTest$1Inner
在測試代碼基礎(chǔ)上交換functionA、B聲明位置的結(jié)果:
classcom.test.InnerClassTest$2Inner
classcom.test.InnerClassTest$1Inner
總結(jié)
以上就是本文關(guān)于Java內(nèi)部類的全限定名規(guī)律代碼示例的全部內(nèi)容,希望對大家有所幫助。感興趣的朋友可以繼續(xù)參閱本站其他相關(guān)專題,如有不足之處,歡迎留言指出。感謝朋友們對本站的支持!
相關(guān)文章
Java如何向主函數(shù)main中傳入?yún)?shù)
這篇文章主要介紹了Java如何向主函數(shù)main中傳入?yún)?shù),具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2022-02-02Java util.List如何實現(xiàn)列表分段處理
這篇文章主要介紹了Java util.List如何實現(xiàn)列表分段處理,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下2020-09-09Post請求參數(shù)是數(shù)組或者List時的請求處理方式
這篇文章主要介紹了Post請求參數(shù)是數(shù)組或者List時的請求處理方式,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2024-05-05RocketMQ整合SpringBoot實現(xiàn)生產(chǎn)級二次封裝
本文主要介紹了RocketMQ整合SpringBoot實現(xiàn)生產(chǎn)級二次封裝,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2022-06-06