java反编译,内部类调用外部类成员总结

转载:

java反编译,内部类调用外部类成员总结

很简单的一个测试类如下:

 

 源码:                                                                                       编译生成的Class文件:
public class testOuter {
   private int a;
   private int b;
   
   private void fun() {
       a += 1;
   }

   class testInner {
       int x = 0;
       testInner() {
           b = 1;
           a = 0;
           fun();
       }
   }

 


class testOuter$testInner {
    int x = 0;
    testOuter$testInner(testOuter paramtestOuter) {
        testOuter.access$002(paramtestOuter, 1);
        testOuter.access$102(paramtestOuter, 0);
        testOuter.access$200(paramtestOuter);
    }
}

 

可以看出,为了使内部类访问外部类的私有成员,编译器生成了形似 "外部类.access$XYZ"的函数。XYZ为数字。X是按照私有成员在内部类出现的顺序递增的。YZ为02的话,标明是基本变量成员;YZ为00的话标明是对象成员或者函数。

 

记录一下,编译反编译看代码时理解代码!

http://www.retrologic.com/innerclasses.doc7.html

你可能感兴趣的:(java)