1. 程式人生 > >jd-gui反編譯 access$xxx類函式說明

jd-gui反編譯 access$xxx類函式說明

使用jd-gui反編譯後去掉註釋 /\* *\d* *\*/

此處略作修改:\/\* *\d* *\*\/

去掉最後一行自動生成的註釋 /\* Location:[\S\s]+?(?=\*/)\*/$

.access$ 反編譯偶內部類呼叫外部類成員問題
很簡單的一個測試類原始碼: 
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檔案:
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的話標明是物件成員或者函式。