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的话标明是对象成员或者函数。

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

public  class Outer{                                            //  this$0

        public class FirstInner{                             //  this$1

                public class SecondInner{               //  this$2

                                      public class ThirdInner{

                                                    

                                      }

                       }

        }

}


java.net.URLClassLoader$1.run  代表的是第一个内部类中的run方法

sun.misc.Launcher$AppClassLoader.loadClass执行了Launcher的内部类AppClassLoader中的loadClass方法


参考文章:http://hi.baidu.com/haoziqi/item/cb743096d54791bc82d2952e


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值