读书人

JAVA 内部类实施 getDeclaredMethods

发布时间: 2012-10-29 10:03:53 作者: rapoo

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 查看。



读书人网 >编程

热点推荐