当你在Java中拥有类似访问$ 002的变量时,它意味着什么?

时间:2011-09-07 14:07:56

标签: java decompiling

我有一个java jar,我已经使用原始开发人员的许可进行了反编译,我们将使用它直到他们能够获得源代码的副本。我遇到了类似于以下内容的成员:

Classname.access$002(Param1, Param2);

Classname是正确的,但是 access $ 002 看起来不正确(除了名称​​ access $ 204 以及其他数字附加到结束),我想知道这是否意味着Java中的任何内容,或者是因为反编译操作是不完整的。

我正在使用JD-GUI来反编译类。

还值得一提的是,没有与 access $ 002 方法具有相同签名的方法,至少在类Classname中。

1 个答案:

答案 0 :(得分:19)

access$XXX方法是从内部非静态类到嵌套类成员的调用。

public class DummyDummy {

private int x = 0;
private Inner i = new Inner();
private int foo(int a, int b) {
    return a+b+x;
}

private class Inner {
    void doIt() {
        System.out.println(
         // Here, DummyDummy.access$0(DummyDummy, int, int) is called 
         // which calls DummyDummy.foo(int, int)
             foo(1,2)                 );
    }
}

public static void main(String[] args) {
    new DummyDummy().i.doIt();
}

}