这破玩意叫 class?
|
就要被 JVM 虚拟机老大加载并运行了,此时老虚走了过来。 老虚:小渣呀,我马上就要把你载了,你先瘦身一下,别占太大地方。 小渣:好的,没问题,等我十秒钟。 public class FlashObject{private String name;private int age;public int add(int a,int b){return a+b;} 小渣:老虚,我瘦身好了,你看看。 老虚:...,你是不是有病。 小渣:怎么了,我把没用的空格和回车啥的都去掉了,瘦身了好多呢! 老虚:行吧,看你这智商,我就给你解释解释。你现在仍然是个文本文件,让你瘦身是让你定一个紧凑的数据结构来表示你这个 Java 文件里的信息,然后告诉我这个数据结构中每个字节都代表什么。 小渣:哦哦,这样啊。 老虚:对啊,这样一是方便我去加载,二是我这个虚拟机可不只是为你 Java 语言服务的,还有很多语言最终都可以转换为我虚拟机识别的,你得设计一个通用的格式。 小渣:嗯嗯,这回我明白啦! 1类信息 我的类名叫 FlashObject。 先找个地方把它存起来,放开头吧。 里的一个小方格是 1 个字节,也就是 8 位。一个英文字母用 ASCII 码表示为 1 个字节,所以占一个方格,之后不再解释。 严谨的我又想到,这个类应该还有其父类。 虽然这个 .java 文件中没写,但也有其默认父类,Object。 当然,我们得记录下全类名 java/lang/Object 记在哪里呢?就紧跟在类名后面吧。 慢地,我发现需要字符串名字的地方越来越多。 除了刚刚的类名、父类名、接口名,还有属性名、方法名、属性的类名、方法的入参类型名、返回值类型名,等等等等。 一方面,要是每个都这么展开写下去,那文件格式会很乱,很多结构都是变长的。 另一方面,很多字符串都是重复的,比如属性 name 的类名 String,与方法 getName 的返回值类名 String,重复写两遍,就浪费了空间。
因此,我决定,之前的方案作废,设计一个新的结构来统一存储这些字符串,我给他起名为常量池。 (编辑:阜新站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |

