您好,登錄后才能下訂單哦!
簡述:
由于最近遇到不少需要反射的類,而其中不乏內部類,在此總結一下內部類的全限定名的規律。
成員內部類
測試結果表明,無論成員內部類是否為靜態,其全限定名都使用如下命名方法:
包名.外部類名$內部類名
測試代碼:
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()); } }
打印結果:
classcom.test.InnerClassTest$StaticInner
classcom.test.InnerClassTest$Inner
匿名內部類
匿名內部類的全限定名滿足如下規律:
包名.外部類名$由1開始的正整數-按照類裝載順序依次排列
測試代碼
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()); } }
打印結果:
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
局部內部類
局部內部類全限定名使用如下命名方式:
包名.外部類名$由1開始的正整數后跟局部類名-其中數字部分是局部類在外部類上下文出現的先后順序
測試代碼
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()); } }
上例打印結果:
classcom.test.InnerClassTest$1Inner
classcom.test.InnerClassTest$2Inner
在測試代碼的基礎上在交換main中functionA、B位置后的結果:
classcom.test.InnerClassTest$2Inner
classcom.test.InnerClassTest$1Inner
在測試代碼基礎上交換functionA、B聲明位置的結果:
classcom.test.InnerClassTest$2Inner
classcom.test.InnerClassTest$1Inner
總結
以上就是本文關于Java內部類的全限定名規律代碼示例的全部內容,希望對大家有所幫助。感興趣的朋友可以繼續參閱本站其他相關專題,如有不足之處,歡迎留言指出。感謝朋友們對本站的支持!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。