反编译中内部类调用外部类成员问题
2013-07-24 13:34
211 查看
.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的话标明是对象成员或者函数。
很简单的一个测试类源码:
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的话标明是对象成员或者函数。
相关文章推荐
- 关于内部类中成员变量和外部类成员变量的问题
- java反编译,内部类调用外部类成员总结
- 成员函数调用delete this的问题
- 关于如何在不使用虚函数的情况下父类调用子类成员函数的问题
- CSDN上的一个问题贴(关于内部类在外部类静态方法中使用问题)
- java中多态父类的成员变量和方法调用问题
- C++继承时子类定义同名成员变量时的调用继承函数的问题
- JAVA中内部类访问外部类成员
- 内部类访问外部类成员
- c++ 父类指针转换为子类指针后调用子类的成员函数问题
- 调用模板类的模板成员函数的问题
- 外部类和内部类的创建调用实例2个
- 关于java 中 classname.new classname2();的写法 其实是外部类静态成员对内部类的访问
- 巧妙解决问题:&CMFCcodeDlg::RunCommands”创建指向成员的指针。MFC多线程调用要求调用的接口必须是全局函数或静态成员函数
- 在外部类中调用内部类
- c++类内接口调用其它函数传递成员指针问题(以二叉树举例)
- c++结构体中包含类对象成员的问题 malloc函数不能调用构造函数 new可以
- 子类、父类相互调用构造器和成员方法问题
- 关于类成员函数指针的调用问题
- JAVA 构造函数 调用 多态的成员方法 的问题