Java内部类的全限定名规律
2016-04-29 16:41
721 查看
Java内部类的全限定名规律
包名.外部类名$内部类名
测试代码:
[java] view
plain copy
print?
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());
}
}
打印结果:
class com.test.InnerClassTest$StaticInner
class com.test.InnerClassTest$Inner
包名.外部类名$由1开始的正整数-按照类装载顺序依次排列
测试代码
[java] view
plain copy
print?
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开始的正整数后跟局部类名-其中数字部分是局部类在外部类上下文出现的先后顺序
测试代码
[java] view
plain copy
print?
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());
}
}
上例打印结果:
class com.test.InnerClassTest$1Inner
class com.test.InnerClassTest$2Inner
在测试代码的基础上在交换main中functionA、B位置后的结果:
class com.test.InnerClassTest$2Inner
class com.test.InnerClassTest$1Inner
在测试代码基础上交换functionA、B声明位置的结果:
class com.test.InnerClassTest$2Inner
class com.test.InnerClassTest$1Inner
成员内部类
测试结果表明,无论成员内部类是否为静态,其全限定名都使用如下命名方法:包名.外部类名$内部类名
测试代码:
[java] view
plain copy
print?
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());
}
}
打印结果:
class com.test.InnerClassTest$StaticInner
class com.test.InnerClassTest$Inner
匿名内部类
匿名内部类的全限定名满足如下规律:包名.外部类名$由1开始的正整数-按照类装载顺序依次排列
测试代码
[java] view
plain copy
print?
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开始的正整数后跟局部类名-其中数字部分是局部类在外部类上下文出现的先后顺序
测试代码
[java] view
plain copy
print?
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());
}
}
上例打印结果:
class com.test.InnerClassTest$1Inner
class com.test.InnerClassTest$2Inner
在测试代码的基础上在交换main中functionA、B位置后的结果:
class com.test.InnerClassTest$2Inner
class com.test.InnerClassTest$1Inner
在测试代码基础上交换functionA、B声明位置的结果:
class com.test.InnerClassTest$2Inner
class com.test.InnerClassTest$1Inner
相关文章推荐
- [改善Java代码] 提倡异常的封装
- [改善Java代码]使用构造函数协助描述枚举项
- 面向对象三大基本特性,五大基本原则
- Spring MVC静态资源处理
- MyEclipse 中各种 libraries 的含义
- rxJava 学习之路(二)
- Servlet & JSP - Java Web 访问资源的路径问题
- java实现批量删除用户,选中删除用户
- 使用spring mvc 4.2.x.jar ClassNotFoundException:org.springframework.web.cors.CorsConfigurationSource
- java5 CountDownLatch线程同步工具类
- Spring事务管理的5种配置方式
- javaweb项目中中文乱码
- Java Swing简单控件实例(JButton,JLabel,JMenuBar,JComboBo)
- Java中的线程池
- 自己写的代码生成器,spring+spring mvc +Hibernate
- Java回调机制解析
- 非常经典的JAVA编程题(正整数分解质因数)
- 谈win7下Eclipse环境中向安装在虚拟机中的Hadoop中上传文件为空的解决方法
- java 定时器
- java连续取掉多个不需要的字符