看了普通的内部类和静态内部类的区别,进行了一些探索与发现。
Case1:
public class Test {
public static void main(String[] args) {
int ab[] = new int[3]; int ii = ab.length;
}
static class A{
}
}
Case2:
public class Test {
public static void main(String[] args) {
int ab[] = new int[3]; int ii = ab.length;
}
class A{
}
}
字节码对比(Test$A)
Case1 --> Case2
常量池差异:
对比可以看下Case1比Case2可以看出初步差异,特别是final Test this$0,如果字节码被修改过会造成一些异常,静态内部类则没有这样的final访问限制。看到这里应该也差不了了解如果在字节码级别Test$A.this$0操作不好也会出现问题,对asm方式操作字节码来说这个是不可接触的。