为什么内部类可以访问外部类的变量
2016-07-10 19:16
387 查看
先写一个Otter类
进入该类目录,通过javac Otter.java 编译得到Otter.class和Otter$Inner.class
然后通过javap -classpath . -v Otter.$Inner(其中.表示当前目录下寻找class文件,-v为-verbose输出信息较多)得到反编译文件:
忽略一些常量池信息,分析内部类文件
其中:
public class Otter { int outerField = 0; class Inner{ void InnerMethod(){ int i = outerField; } } }
进入该类目录,通过javac Otter.java 编译得到Otter.class和Otter$Inner.class
然后通过javap -classpath . -v Otter.$Inner(其中.表示当前目录下寻找class文件,-v为-verbose输出信息较多)得到反编译文件:
Compiled from "Otter.java" public class com.example.xiahangli.memoryleakeage.Otter extends java.lang.Object SourceFile: "Otter.java" InnerClass: #6= #5 of #3; //Inner=class com/example/xiahangli/memoryleakeage/Otter$Inner of class com/example/xiahangli/memoryleakeage/Otter minor version: 0 major version: 50 Constant pool: const #1 = Method #4.#16; // java/lang/Object."<init>":()V const #2 = Field #3.#17; // com/example/xiahangli/memoryleakeage/Otter.outerField:I const #3 = class #18; // com/example/xiahangli/memoryleakeage/Otter const #4 = class #19; // java/lang/Object const #5 = class #20; // com/example/xiahangli/memoryleakeage/Otter$Inner const #6 = Asciz Inner; const #7 = Asciz InnerClasses; const #8 = Asciz outerField; const #9 = Asciz I; const #10 = Asciz <init>; const #11 = Asciz ()V; const #12 = Asciz Code; const #13 = Asciz LineNumberTable; const #14 = Asciz SourceFile; const #15 = Asciz Otter.java; const #16 = NameAndType #10:#11;// "<init>":()V const #17 = NameAndType #8:#9;// outerField:I const #18 = Asciz com/example/xiahangli/memoryleakeage/Otter; const #19 = Asciz java/lang/Object; const #20 = Asciz com/example/xiahangli/memoryleakeage/Otter$Inner; { int outerField; public com.example.xiahangli.memoryleakeage.Otter(); Code: Stack=2, Locals=1, Args_size=1 0: aload_0 1: invokespecial #1; //Method java/lang/Object."<init>":()V 4: aload_0 5: iconst_0 6: putfield #2; //Field outerField:I 9: return LineNumberTable: line 6: 0 line 7: 4 line 9: 9 }
忽略一些常量池信息,分析内部类文件
其中:
这里写代码片
相关文章推荐
- java对世界各个时区(TimeZone)的通用转换处理方法(转载)
- java-注解annotation
- java-模拟tomcat服务器
- java-用HttpURLConnection发送Http请求.
- java-WEB中的监听器Lisener
- Android IPC进程间通讯机制
- Android Native 绘图方法
- Android java 与 javascript互访(相互调用)的方法例子
- 介绍一款信息管理系统的开源框架---jeecg
- 聚类算法之kmeans算法java版本
- java实现 PageRank算法
- PropertyChangeListener简单理解
- c++11 + SDL2 + ffmpeg +OpenAL + java = Android播放器
- 插入排序
- 冒泡排序
- 堆排序
- 快速排序
- 二叉查找树