jd-gui反編譯 access$xxx類函式說明
阿新 • • 發佈:2018-12-23
使用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的話標明是物件成員或者函式。