看了普通的内部类和静态内部类的区别,进行了一些探索与发现。
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方式操作字节码来说这个是不可接触的。
本文通过代码示例对比分析了普通内部类和静态内部类的区别,特别是从字节码层面揭示了两者在常量池和访问限制上的差异。
779

被折叠的 条评论
为什么被折叠?



