首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > 编程 >

JAVA 内部类实施 getDeclaredMethods 的陷阱

2012-10-29 
JAVA 内部类执行 getDeclaredMethods 的陷阱今天同事用到了 JAVA Class 的 getDeclaredMethods 方法,主要

JAVA 内部类执行 getDeclaredMethods 的陷阱


今天同事用到了 JAVA Class 的 getDeclaredMethods 方法,主要是要得到类声明的字段
问题是每次程序执行都会多得到一个 Field 对象 this$0
原来对于内部类,编译器都自动增加一个 final 类型 Field 对象,它是外部类的一个引用

为了试验内部类编译的实际情况,写了如下测试类:

class innerclass/GetFields$InnerClass {  // compiled from: GetFields.java  // access flags 0  INNERCLASS innerclass/GetFields$InnerClass innerclass/GetFields InnerClass  // 注意:编译器自动增加的字段  final Linnerclass/GetFields; this$0  // 构造方法  <init>(Linnerclass/GetFields;)V   L0    LINENUMBER 8 L0    ALOAD 0    ALOAD 1    PUTFIELD innerclass/GetFields$InnerClass.this$0 : Linnerclass/GetFields;    ALOAD 0    INVOKESPECIAL java/lang/Object.<init>()V    RETURN   L1    LOCALVARIABLE this Linnerclass/GetFields$InnerClass; L0 L1 0    MAXSTACK = 2    MAXLOCALS = 2  // 省略该方法的代码  public getFields()V}

以上代码可以通过 eclipse 插件 BytecodeOutline 查看。



热点排行