簡述:
由於最近遇到不少需要反射的類,而其中不乏內部類,在此總結一下內部類的全限定名的規律。
成員內部類
測試結果表明,無論成員內部類是否為靜態,其全限定名都使用如下命名方法:
包名.外部類名$內部類名
測試代碼:
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內部類的全限定名規律代碼示例的全部內容,希望對大家有所幫助。感興趣的朋友可以繼續參閱本站其他相關專題,如有不足之處,歡迎留言指出。感謝朋友們對本站的支持!