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)文章
SpringMVC獲取請求參數(shù)實現(xiàn)方法介紹
Spring MVC 是 Spring 提供的一個基于 MVC 設(shè)計模式的輕量級 Web 開發(fā)框架,本質(zhì)上相當(dāng)于 Servlet,Spring MVC 角色劃分清晰,分工明細(xì),這篇文章主要介紹了SpringMVC實現(xiàn)獲取請求參數(shù)方法2022-11-11
Java實現(xiàn)駝峰、下劃線互轉(zhuǎn)的方法
這篇文章主要介紹了Java實現(xiàn)駝峰、下劃線互轉(zhuǎn)的示例代碼,主要有使用 Guava 實現(xiàn)和自定義代碼轉(zhuǎn),本文結(jié)合實例代碼給大家介紹的非常詳細(xì),需要的朋友可以參考下2023-05-05
Spring的Bean生命周期之BeanDefinition詳解
這篇文章主要介紹了Spring的Bean生命周期之BeanDefinition詳解,在spring bean創(chuàng)建過程 依賴 BeanDefinition 中的信息處理bean的生產(chǎn),BeanDefinition 是 Spring Framework 中定義 Bean 的配置元信息接口,需要的朋友可以參考下2023-12-12
SpringBoot使用AOP實現(xiàn)防重復(fù)提交功能
這篇文章主要為大家詳細(xì)介紹了SpringBoot如何使用AOP實現(xiàn)防重復(fù)提交功能,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下2024-03-03

