为什么给Java代码加个空行class文件就识别不出来了

为了写出这几行优美的代码,主要是为了让它输出优美动听的乐符,我下了一番功夫。你不要觉得简单,我把它打印出来给普通的保洁阿姨去看,阿姨竟然连xjjdog都认不出来。别说代码了,中英文混血,就秒杀一大堆高干分子。
想说爱我就那么难么?怎么这么多的废话呢?这次探讨的主要问题是,给java源文件加个空行之后,它生成的字节码,会有变化么?
1、翻脸不认人
java号称一次编译到处运行,大概就是class文件的功劳。不同的java版本编译之后的class文件那是肯定不一样的,因为里面有一个版本号,那肯定影响了它们的内容。
我们就看一下,如果给上面的代码,加一个空行,它的class文件会不会变。
这个空行还不能随便加。它可能在xjjdog上面,也可能在下面。可能在{中,也可能在文件末尾。
1.1、打脸
在验证之前,我们先看一下当前的class文件md5值。
我非常喜欢被打脸,所以先看一种加空行也无所谓的情况。
再次编译之后看md5值,果然被打脸了。还好我已经练就了脸不红心不跳的本领,这个结果厚着脸皮接受。
1.2、抹药
为了和主题遥相呼应,安慰一下受伤的心灵,我们把空行转移到了这里。
再次编译之后,看md5值(怎么感觉这句话已经说过了呢)。
变了。这次真的变了。
使用hexdump命令分析两次生成的字节码,发现其中只不过变了一个数字。
2、骚戴斯乃
特别不喜欢分析这种二进制的东西。虽然cafebabe这个魔数在第一行历历在目。咖啡宝贝?怎么听着像是某个番号?
我们还是用javap来看一下它的原型。
javap -p -v helloworld.class
通过对比两次生成的字节码,我们终于发现了这个变动,是一个叫做linenumbertable的结构引起的。
使用asmtools.jar深入分析这个结构,可以看到同样的信息。
linenumbertable展示了java源码行号和字节码指令的对应关系。前面的数字代表java源代码中的行号,而冒号后面的则代表字节码里每行指令的映射关系。在对代码进行调试的时候,能够快速定位,顺利进行。
也就是说,这些是辅助信息,我们可以在编译的时候抹掉它。怎么抹掉呢?给javac一个参数就ok了。
javac -g:none helloworld.java
这样编译后的字节码,紧凑、优雅、无用。不管你加多少空行,生成的字节码都是一样的。可是,我们再也不能畅快淋漓的进行调试了。
{ public helloworld(); descriptor: ()v flags: acc_public code: stack=1, locals=1, args_size=1 0: aload_0 1: invokespecial #1 // method java/lang/object.:()v 4: return public static void main(java.lang.string[]); descriptor: ([ljava/lang/string;)v flags: acc_public, acc_static code: stack=2, locals=1, args_size=1 0: getstatic #2 // field java/lang/system.out:ljava/io/printstream; 3: ldc #3 // string hello xjjdog 5: invokevirtual #4 // method java/io/printstream.println:(ljava/lang/string;)v 8: return}
要想在开发阶段让字节码又香又有用,可以直接使用参数-g开启所有调试信息。idea可以在编译选项里对这个参数进行开启。有很多同学在编译之后的代码里找不到局部变量的符号表,也是由于这个参数没有开启所引起的。
end
麻雀虽小,五脏俱全。能写helloworld,就证明已经凌驾于大部分人之上,能了解这些东西,就证明已经是人上之人。怪不得大家都说:就差一个程序员了。
helloworld,表面上看起来人五人六,原来背地里都有自己的小99啊。

基本的逻辑电路有哪些_想要的逻辑电路都在这
锂电材料产业拐点何时将至?
重力加速度传感器原理及应用
380V电流表电压表接线方法图解
微软开发一款虚拟世界模拟器 可测试无人驾驶汽车
为什么给Java代码加个空行class文件就识别不出来了
多元化应用驱动存储加速分层,西部数据发展为最强全场景存储方案
华为MateBookX体验 性能不错售价良心
液压传感器的构造及工作原理
介绍自适应有限元中几种常见的后验误差
业界再增两起并购:新思科技收购PikeTec,AMD收购Mipsology
博通受禁华影响销售减百亿 市值减千亿
O-RAN将助力通信行业提升5G时代面向垂直行业服务的能力
示范引领,无锡高新区为国内物联网发展投石探路
AMD全新GPU架构解析 性能提升14%功耗降低23%
PCB设计制造中人工智能可快速轻松地缩小缺陷范围
华为携手优质家居品牌,搭建了智能家居开放的互联互通平台
挪威新建海底电缆连接苏格兰推迟做出决定
星星相映,共赢未来! 三星携手红星美凯龙品牌严选活动启动
Wing宣布将于今年10月开展无人机首次试点服务