0%

Matrix 在每个方法的开始和结束的时候,添加了 埋点,那么这是怎么实现的呢?字节码插桩技术,是在编译的时候将代码放进去的。

内部类访问外部类的私有属性的原理:

1
2
3
4
5
6
7
8
9
10
public class OutClass {
int i ;
private int j;

class InnerClass {
public InnerClass(){
int k = i + j;
}
}
}

为什么内部类 InnerClass 能直接使用 OutClass 中的 i 和 j ,尤其 j 还是 private 的。这是因为编译后,外部类会生成有一个静态方法:

1
2
3
static int access$000(com.demo.OutClass clazz) {
return clazz.j;
}

所以,最后内部类是通过静态方法获取到 j 的值。传入了 OutClass 的对象。而 i 是怎么拿到的呢?其实是通过 getfield 指令。

谢谢你的鼓励