色哟哟视频在线观看-色哟哟视频在线-色哟哟欧美15最新在线-色哟哟免费在线观看-国产l精品国产亚洲区在线观看-国产l精品国产亚洲区久久

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
电子发烧友
开通电子发烧友VIP会员 尊享10大特权
海量资料免费下载
精品直播免费看
优质内容免费畅学
课程9折专享价
創(chuàng)作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內(nèi)不再提示

為什么給Java代碼加個空行class文件就識別不出來了

Wildesbeast ? 來源:今日頭條 ? 作者:小姐姐味道 ? 2020-02-18 16:02 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

為了寫出這幾行優(yōu)美的代碼,主要是為了讓它輸出優(yōu)美動聽的樂符,我下了一番功夫。你不要覺得簡單,我把它打印出來給普通的保潔阿姨去看,阿姨竟然連xjjdog都認不出來。別說代碼了,中英文混血,就秒殺一大堆高干分子。

想說愛我就那么難么?怎么這么多的廢話呢?這次探討的主要問題是,給Java源文件加個空行之后,它生成的字節(jié)碼,會有變化么?

1、翻臉不認人

Java號稱一次編譯到處運行,大概就是class文件的功勞。不同的Java版本編譯之后的class文件那是肯定不一樣的,因為里面有一個版本號,那肯定影響了它們的內(nèi)容。

我們就看一下,如果給上面的代碼,加一個空行,它的class文件會不會變。

這個空行還不能隨便加。它可能在xjjdog上面,也可能在下面。可能在{中,也可能在文件末尾。

1.1、打臉

在驗證之前,我們先看一下當前的class文件md5值。

我非常喜歡被打臉,所以先看一種加空行也無所謂的情況。

再次編譯之后看md5值,果然被打臉了。還好我已經(jīng)練就了臉不紅心不跳的本領,這個結(jié)果厚著臉皮接受。

1.2、抹藥

為了和主題遙相呼應,安慰一下受傷的心靈,我們把空行轉(zhuǎn)移到了這里。

再次編譯之后,看md5值(怎么感覺這句話已經(jīng)說過了呢)。

變了。這次真的變了。

使用hexdump命令分析兩次生成的字節(jié)碼,發(fā)現(xiàn)其中只不過變了一個數(shù)字。

2、騷戴斯乃

特別不喜歡分析這種二進制的東西。雖然CAFEBABE這個魔數(shù)在第一行歷歷在目。咖啡寶貝?怎么聽著像是某個番號?

我們還是用javap來看一下它的原型。

javap -p -v HelloWorld.class

通過對比兩次生成的字節(jié)碼,我們終于發(fā)現(xiàn)了這個變動,是一個叫做LineNumberTable的結(jié)構(gòu)引起的。

使用asmtools.jar深入分析這個結(jié)構(gòu),可以看到同樣的信息。

LineNumberTable展示了Java源碼行號和字節(jié)碼指令的對應關(guān)系。前面的數(shù)字代表Java源代碼中的行號,而冒號后面的則代表字節(jié)碼里每行指令的映射關(guān)系。在對代碼進行調(diào)試的時候,能夠快速定位,順利進行。

也就是說,這些是輔助信息,我們可以在編譯的時候抹掉它。怎么抹掉呢?給javac一個參數(shù)就ok了。

javac -g:none HelloWorld.java

這樣編譯后的字節(jié)碼,緊湊、優(yōu)雅、無用。不管你加多少空行,生成的字節(jié)碼都是一樣的。可是,我們再也不能暢快淋漓的進行調(diào)試了。

{ 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}

要想在開發(fā)階段讓字節(jié)碼又香又有用,可以直接使用參數(shù)-g開啟所有調(diào)試信息。IDEA可以在編譯選項里對這個參數(shù)進行開啟。有很多同學在編譯之后的代碼里找不到局部變量的符號表,也是由于這個參數(shù)沒有開啟所引起的。

END

麻雀雖小,五臟俱全。能寫HelloWorld,就證明已經(jīng)凌駕于大部分人之上,能了解這些東西,就證明已經(jīng)是人上之人。怪不得大家都說:就差一個程序員了。

HelloWorld,表面上看起來人五人六,原來背地里都有自己的小99啊。

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學習之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • JAVA
    +關(guān)注

    關(guān)注

    20

    文章

    2987

    瀏覽量

    108158
  • 代碼
    +關(guān)注

    關(guān)注

    30

    文章

    4893

    瀏覽量

    70441
  • Class
    +關(guān)注

    關(guān)注

    0

    文章

    53

    瀏覽量

    20051
收藏 0人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評論

    相關(guān)推薦
    熱點推薦

    mdk5添加頭文件路徑檢索不出來文件是怎么回事?

    mdk5添加頭文件路徑檢索不出來文件
    發(fā)表于 05-29 07:39

    dlp4500藍色光投不出來了如何維修?

    dlp4500藍色光投不出來了,應該是靜電導致的,請問如何維修呢
    發(fā)表于 02-26 08:16

    點開始,點所有程序不出來了,怎么辦啊?

    `<font face="Verdana">點開始,點所有程序不出來了,怎么辦啊?</font>&
    發(fā)表于 12-26 13:55

    I2C讀出來的是器件地址,后面的數(shù)據(jù)讀不出來

    奇葩事啊,,I2C讀出來的是器件地址,后面的數(shù)據(jù)讀不出來,用示波器看了。數(shù)據(jù)也出來了代碼運行正常,沒有出現(xiàn)打亂的情況。PWM_Red就是讀出來
    發(fā)表于 01-13 15:13

    AD打開PCB文檔顯示不出來

    我裝的AD15原來沒有一點問題,現(xiàn)在出現(xiàn)了打開以前的PCB檔顯示不出來了,有那位大神知道,拜謝了
    發(fā)表于 12-23 10:00

    Allegro 16.6 place manully 對話框不見了,怎么都不出來,求助!

    Allegro 16.6 place manully 對話框不見了,怎么都不出來,求助!如圖,昨天突然就不出來了,并排顯示窗口什么的沒用,大神們求救哇。。。
    發(fā)表于 05-17 19:17

    TYPE C兼容性問題,用在雷電口識別不出來

    現(xiàn)在有一條走光路的TYPE C的線,普通的USB口可以識別硬盤,但是用在雷電口識別不出來。在雷電口CC溝通上了,有正常5V供電,求各位支招,可能是什么原因
    發(fā)表于 12-11 09:20

    DM8168 NAND驅(qū)動位寬從16位改到8位,ID讀不出來了

    我把demo上的NAND驅(qū)動位寬從16位改到8位,GPCM好像不工作了,ID都讀不出來了,哪位知道為什么?其他的都沒有任何改動。
    發(fā)表于 02-15 09:53

    mup_dmp_init函數(shù)里跳不出來

    最近打算用mpu的dmp讀出姿態(tài)角,可將原子探索者的mpu6050部分的代碼移植過來后,在mpu_dmp_init這個初始化函數(shù)跳不出來。現(xiàn)象是:led燈也亮的是紅燈,串口也沒有返回電腦什么數(shù)據(jù),我
    發(fā)表于 04-22 05:02

    為什么guibuilder里面的圖像顯示控件移植到開發(fā)版圖像就顯示不出來了

    其它的控件,滾動條,按鈕什么的都顯示正常,就圖片顯示不出來。。。代碼是自動生成的,看來看去都覺得沒什么錯啊。。。有沒有遇到同樣問題的啊
    發(fā)表于 06-27 04:35

    請問已經(jīng)創(chuàng)建的壓縮文件cuteftp中顯示不出來該怎么辦??

    uboot打補丁的時候,CRT中已創(chuàng)建了壓縮文件,但是在cuteftp中顯示不出來?還望大神幫忙解決。
    發(fā)表于 09-11 04:59

    器件拿不出來

    `liberier庫器件拿不出來怎么辦`
    發(fā)表于 01-08 17:05

    統(tǒng)計java代碼行數(shù)和jar包中.class代碼的行數(shù)

    本文檔內(nèi)容介紹了統(tǒng)計java代碼行數(shù)和jar包中.class代碼的行數(shù),供參考
    發(fā)表于 03-19 15:27 ?0次下載

    美國芯片對中國的影響是沒有美國技術(shù)華為手機造不出來

    美國芯片對中國的影響是什么?難道沒有美國技術(shù)我們連手機造不出來?難道真像俞敏洪說的那樣? 俞敏洪表示,即使是華為現(xiàn)在造出了自己的芯片,但沒有美國芯片專利技術(shù),中國手機一臺也造不出來。你如何看待
    的頭像 發(fā)表于 11-09 16:05 ?1.7w次閱讀

    虹膜識別安全嗎_虹膜識別不出來怎么辦

    本文首先分析了虹膜識別是否安全,其次介紹了虹膜識別不出來的解決方法,最后闡述了虹膜識別的發(fā)展阻礙。
    發(fā)表于 04-02 14:38 ?4165次閱讀
    主站蜘蛛池模板: 国产一区二区三区在线看片 | 动漫美女被羞羞动漫怪物 | 久久亚洲网站 | 亚洲 日韩 国产 制服 在线 | 亚久久伊人精品青青草原2020 | 一二三四免费中文在线1 | 最新黄yyid | 日韩精品一区二区三区色欲AV | 精品国产在线亚洲欧美 | WWW国产色情在线观看APP | 色www精品视频在线观看 | 美女被爽cao免费漫画 | 1234成人网| 成人影院午夜久久影院 | 日日摸夜添夜夜夜添高潮 | 麻豆产精品一二三产区区 | 国产 日韩 欧美 综合 激情 | 久久re6热在线视频 久久er国产免费精品 | 国产亚洲精品久久无亚洲 | 国产亚洲精品久久久久 | 校园高h肉耽文 | 国产AV99激情久久无码天堂 | a在线观看免费视频 | 99久免费精品视频在线观看2 | 忘忧草日本在线社区WWW电影 | 亚洲精品久久久久久久蜜臀老牛 | 老师小扫货水能么多叫出来 | 久久精品国产久精国产果冻传媒 | xxnx18日本| 国产亚洲精品成人AV久久 | 思思re热免费精品视频66 | 午夜片神马影院福利 | 国产精品久久久久久亚洲毛片 | 三级黄色片免费观看 | videossexo乌克兰 | 国精产品999一区二区三区有限 | 亚洲视频国产 | 亚洲中文字幕永久在线全国 | 亚洲综合春色另类久久 | 午夜毛片在线观看 | 久热这里在线精品 |

    電子發(fā)燒友

    中國電子工程師最喜歡的網(wǎng)站

    • 2931785位工程師會員交流學習
    • 獲取您個性化的科技前沿技術(shù)信息
    • 參加活動獲取豐厚的禮品