成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

為什么給Java代碼加個(gè)空行,class文件就翻臉不認(rèn)人了?

開(kāi)發(fā) 后端
給Java源文件加個(gè)空行之后,它生成的字節(jié)碼,會(huì)有變化么?

 [[315266]]  

  1. public class HelloWorld {     
  2.     public static void main(String[] args) { 
  3.         System.out.println("love xjjdog"); 
  4.      } 

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

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

1、翻臉不認(rèn)人

Java號(hào)稱一次編譯到處運(yùn)行,大概就是class文件的功勞。不同的Java版本編譯之后的class文件那是肯定不一樣的,因?yàn)槔锩嬗幸粋€(gè)版本號(hào),那肯定影響了它們的內(nèi)容。

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

這個(gè)空行還不能隨便加。它可能在xjjdog上面,也可能在下面??赡茉趝中,也可能在文件末尾。

1.1、打臉

在驗(yàn)證之前,我們先看一下當(dāng)前的class文件md5值。 

 

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

 

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

 

1.2、抹藥

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

 

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

變了。這次真的變了。 

 

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

 

2、騷戴斯乃

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

我們還是用javap來(lái)看一下它的原型。

javap -p -v HelloWorld.class

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

 

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

 

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

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

javac -g:none HelloWorld.java

這樣編譯后的字節(jié)碼,緊湊、優(yōu)雅、無(wú)用。不管你加多少空行,生成的字節(jié)碼都是一樣的??墒?,我們?cè)僖膊荒軙晨炝芾斓倪M(jìn)行調(diào)試了。

  1.   public HelloWorld(); 
  2.     descriptor: ()V 
  3.     flags: ACC_PUBLIC 
  4.     Code: 
  5.       stack=1, locals=1, args_size=1 
  6.          0: aload_0 
  7.          1: invokespecial #1                  // Method java/lang/Object."<init>":()V 
  8.          4: return 
  9.  
  10.   public static void main(java.lang.String[]); 
  11.     descriptor: ([Ljava/lang/String;)V 
  12.     flags: ACC_PUBLIC, ACC_STATIC 
  13.     Code: 
  14.       stack=2, locals=1, args_size=1 
  15.          0: getstatic     #2                  // Field java/lang/System.out:Ljava/io/PrintStream; 
  16.          3: ldc           #3                  // String Hello xjjdog 
  17.          5: invokevirtual #4                  // Method java/io/PrintStream.println:(Ljava/lang/String;)V 
  18.          8: return 

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

 

 

責(zé)任編輯:武曉燕 來(lái)源: xjjdog
相關(guān)推薦

2020-02-19 11:16:40

Javaclass代碼

2024-02-05 22:48:32

系統(tǒng)代碼

2021-09-14 08:50:38

Kubernetes容器Docker

2019-04-09 10:45:18

IPv6運(yùn)營(yíng)商協(xié)議

2024-03-29 08:10:43

索引失效SQL

2017-02-27 15:19:04

2021-09-30 06:31:12

Spring Boot配置密碼

2018-04-02 10:58:28

大數(shù)據(jù)sqoop大數(shù)據(jù)項(xiàng)目

2018-04-11 09:50:04

大數(shù)據(jù)

2023-03-20 07:23:45

Docker開(kāi)源存儲(chǔ)庫(kù)

2025-05-12 08:21:15

2020-04-17 19:41:57

基礎(chǔ)架構(gòu)即代碼平臺(tái)即代碼云計(jì)算

2021-03-01 08:19:09

Java 包裝類對(duì)象

2021-08-26 11:10:42

架構(gòu)運(yùn)維技術(shù)

2024-11-19 18:03:04

2020-06-10 09:06:48

MongoDB架構(gòu)高可用

2024-06-24 07:58:00

2023-07-23 17:19:34

人工智能系統(tǒng)

2019-09-06 10:31:45

軟件開(kāi)發(fā)地圖

2021-08-10 23:09:55

區(qū)塊鏈數(shù)據(jù)技術(shù)
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)

主站蜘蛛池模板: 日韩av免费在线观看 | av在线电影网 | 久久精品欧美一区二区三区不卡 | 欧美日韩精品国产 | 成人福利在线视频 | 一级国产精品一级国产精品片 | 成人午夜免费福利视频 | 日韩精品在线看 | 成人影院一区二区三区 | 色婷婷久久久亚洲一区二区三区 | 国产三级精品三级在线观看四季网 | 日韩毛片在线视频 | av一区二区三区四区 | 国产精品毛片 | 求毛片| 成人妇女免费播放久久久 | 天堂一区| 91一区二区| 无码日韩精品一区二区免费 | 美女视频一区二区 | 中文字幕在线免费 | 日韩在线播放第一页 | 亚洲精品福利在线 | 久久久久久色 | 亚洲精品第一页 | 亚洲www啪成人一区二区麻豆 | 亚洲精品字幕 | 欧美久| 狠狠色香婷婷久久亚洲精品 | 国产综合精品一区二区三区 | h视频在线播放 | 久久久精品久 | 亚洲免费人成在线视频观看 | av男人天堂影院 | 午夜小电影 | 日韩av免费看 | av中文字幕在线观看 | 国产在线一区二区三区 | 九一视频在线播放 | 天天色天天 | 一级a爱片性色毛片免费 |