加入收藏 | 设为首页 | 会员中心 | 我要投稿 阜新站长网 (https://www.0418zz.com.cn/)- 管理运维、AI硬件、数据集成、云备份、负载均衡!
当前位置: 首页 > 站长资讯 > 评论 > 正文

这破玩意叫 class?

发布时间:2021-03-28 11:57:06 所属栏目:评论 来源:互联网
导读:就要被 JVM 虚拟机老大加载并运行了,此时老虚走了过来。 老虚:小渣呀,我马上就要把你载了,你先瘦身一下,别占太大地方。 小渣:好的,没问题,等我十秒钟。 public class FlashObject{private String name;private int age;public int add(int a,int b){

就要被 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,重复写两遍,就浪费了空间。

因此,我决定,之前的方案作废,设计一个新的结构来统一存储这些字符串,我给他起名为常量池。

(编辑:阜新站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读