前言:呂二狗從小家境貧寒,在他6歲的時候因為敵軍入侵了城池,在城中燒殺擄掠,他的父母也因此命歸黃泉,只留下了一個無依無靠,對這個世界還充滿好奇與善意的二狗。而他父母所遭遇的一切,都被藏在箱子里的二狗看到了,小小的二狗,又一次留下了眼淚,而這一次不是撒嬌,而是以后再也沒有人可以讓他肆意地撒嬌了,他的父母都被官軍殺害了!
二狗經過十幾年的流浪,最終逐漸在一個名叫貂絲城的城池中安定了下來,但是流浪的生活雖然暫時結束了,但是內心那燃燒著的痛依然強烈。
二狗將自己以前所保存的書籍,從自己沾滿污漬的袋子里拿了出來,經過了這十幾年的積累,二狗已經保存了許多各種各樣的書籍,不過有些因為時間過長,存放不當,封面早已經難以辨認,還有一些因為潮濕,快腐爛到只能當劈柴燒掉了。二狗于是趕緊把那些潮濕的書拿了出來,一本一本地放在太陽底下曬著,其余地則按照類別整理好,放置到了書柜上。
于是二狗下定決心,向勾踐學習,立志沉潛一段時間,學習兵法,謀略,套路,并堅持鍛煉身體,為的就是那一天的復仇,而那一天,究竟是哪一天呢?
二狗看的第一本兵書,叫做《深入理解Java虛擬機-JVM高級特性與最佳實踐》,經過幾周的學習,二狗汲取到了大量的知識,但是他覺著學習東西不能只是紙上談兵,還要去實踐操作,這樣才能在將來的某一天,帶領自己的士兵沖鋒陷陣,身先士卒。所以,第二天清晨,他披上鎧甲,拿起武器,靜靜地走到了那看似危機蟄伏的龍潭虎穴
出了固若金湯的城池,他繼續向東偏南走去,只見那邊天空烏云籠罩,剎那間一股寒氣逼了過來,二狗慢慢地咽了一口,抬起頭凝視遠方,心想那波譎云詭的黑暗地帶究竟隱藏著什么......
隨著慢慢地靠近、他那原本冷靜的心也逐漸變得不安起來。
隨著進一步地接近,他終于看清楚了它的面貌,這個時候他才稍微放松了一下,因為此物看起來不算強大,尚可戰勝:
package JVMLearning.sixChapter;
/**
* Created by Max on 2016/9/14.
*/
public class Computer {
private String keyBoard;
public static final String name = "MiniJack";
public Computer(String keyBoard) {
this.keyBoard = keyBoard;
}
public String function2() {
String describe = "play games";
return describe;
}
public int solveException() {
int a;
try {
a = 1;
return a;
} catch (Exception e) {
e.printStackTrace();
return 0;
} finally {
a = 2;
}
}
}
于是二狗決定先發制獸,舉起武器,向怪物砍了過去!!!啊啊啊我打我打!!!!@#¥%……&*!@#¥%……&@
二狗首先對怪物發起了第一波的進攻,怪物面對這突如其來的攻擊,顯然沒有任何準備,就在這電光火石之間,怪物身重數刀,其中一刀砍到了怪物的心臟之處,這個時候怪物靜靜地立在地上,注視了二狗幾秒,然后轟然倒地,血流不止,這個時候二狗殺意正酣,又一個箭步沖了上去,最后又經過二狗的數次補刀,從頭到尾,從前到后,這只怪物最終含恨死去。
其實這個故事告訴我們,他媽的偷襲有多么重要!
二狗此時已是滿臉血跡,全身上下已被鮮血染紅,仿佛剛從染缸里面爬出來。他在逐漸平復呼吸的同時,也準備好了把這只怪物給帶回去,作為自己的首勝戰利品。
最后待二狗將它拽回家已是筋疲力盡,挪動幾步之后,在恍惚中倒了下去。
待到二狗緩慢地睜開眼睛,看到屋子里的東西,逐漸回憶起了之前所發生的事情。就在這個時候,他突然發現,這只怪物的尸體好像發生了一些微妙的變化。
二狗走上前去,驚奇地發現僅僅過了幾個時辰,該怪獸的尸體已經逐漸變成了一塊塊的晶石,塊頭小一點的已經在微弱地閃著紫藍色的光芒,大的還在由血紅向紫藍變化中,尸身周圍的一灘灘血跡也逐漸變成了非常細小的晶石粒。
二狗猶猶豫豫地拿起了其中一塊比較小的晶石,緩慢地舉到眼前,原來在一圈微弱的光芒之中,上面刻有一行行的符號,這種符號他以前從未見過,上邊寫著:
CA FE BA BE
看著這些奇怪的符號,立即引起了二狗的極大興趣,于是他趕緊從書柜上找一些與奇怪文字有關的書籍來進行查詢,經過一整個下午的時間,幾乎翻遍了所有書籍,二狗還是沒有找到,就在快要放棄之時,突然想到了放在桌子的那本《深入理解Java虛擬機-JVM高級特性與最佳實踐》,于是抱著嘗試的態度翻了幾頁,一個似曾相識的符號引起了他的注意,剎那間他激動地跳了起來,上邊寫著
Class晶石的魔數的獲得很有"浪漫氣息",值為:0xCAFEBABE
他找到了,他終于找到了,于是他接著朝后邊看相關的描述,大約過了10分鐘之后,二狗把書慢慢地放下,輕輕扭過頭去看屋子里的那堆已經完全形成的晶石,他緊張又激動,他發現了一個驚天的秘密!
據書上描述,這些發著微弱紫藍熒光的晶石,乃是制造巨型怪獸的必備組件,不同的晶石上有不同的描述,代表著不同的功能。剛剛看到的那串符號"CA FE BA BY"代表著這只怪獸是屬于Ⅰ型的,那么二狗不禁想到,難道還有Ⅱ型?Ⅲ型?那么他們是該有多強大呢?一想到這里,二狗不禁后背發涼。
接著借著這本書,二狗繼續對其余的晶石進行了解讀:
0000 0034
書上還記載了34這種表示法其實是由高等智慧生物采用的十六進制編碼,34說明這只怪獸的版本號,通過書上給出的記錄,這只怪獸是一只最新研制的。
00 25
表示這只怪獸一共有多少個部位。
借著巨大的好奇心,二狗一頭扎進去對這25個部分的解讀:
<1> 0A 0007 001A : 怪獸功能信息(u1,u2,u2)
<2> 09 0006 001B : 怪獸部位命名描述信息(u1,u2,u2)
<3> 08 001C : 怪獸部位命名信息(u1,u2)
<4> 07 001D : 怪獸名字系列信息(u1,u2)
<5> 0A 0004 001E : 怪獸功能信息(u1,u2,u2)
<6> 07 001F : 怪獸名字系列信息(u1,u2)
<7> 07 0020 : 怪獸名字系列信息(u1,u2)
<8> 01 0008 (0008代表后邊還有8個字節的字符串信息)
6B 65 79 42 6F 61 72 64 (該8個字節編碼的字符串為:keyBoard)
: 怪獸文(u1,u2,u1)
<9> 01 0012
4C 6A 61 76 61 2F 6C 61 6E 67
2F 53 74 72 69 6E 67 3B (此18個字節編碼的字符串為:Ljava/lang/String;)
: 怪獸文(u1,u2,u1)
<10> 01 0004
6E 61 6D 65 (編碼字符串為name)
: 怪獸文(u1,u2,u1)
<11> 01 000D
43 6F 6E 73 74 61 6E 74 56 61 6C 75 65 (編碼字符串為constantValue)
: 怪獸文(u1,u2,u1)
<12> 08 0021 : 怪獸部位命名信息(u1,u2)
<13> 01 0006
3C 69 6E 69 74 3E -> <init>
: 怪獸文(u1,u2,u1)
<14> 01 0015
28 4c6a 6176
612f 6c61 6e67 2f53 7472 696e 673b 2956
->(Ljava/lang/String;)V (參數類型)
: 怪獸文(u1,u2,u1)
<15> 01 0004
43 6F 64 65 -> Code (Code屬性)
: 怪獸文(u1,u2,u1)
<16> 01 000F
4C 69 6E 65 4E 75 6D 62 65 72 54 61 62 6C 65
-> LineNumberTable
: 怪獸文(u1,u2,u1)
<17> 01 0009
66 75 6E 63 74 69 6F 6E 32 -> function2
: 怪獸文(u1,u2,u1)
<18> 01 0014
2829 4c6a 6176 612f 6c61
6e67 2f53 7472 696e 673b -> ()Ljava/lang/String;
: 怪獸文(u1,u2,u1)
<19> 01 000E
73 6f6c 7665 4578 6365 7074
696f 6e -> solveException (方法名稱)
: 怪獸文(u1,u2,u1)
<20> 01 0003
28 29 49 -> ()I (方法的描述,先參數后返回值)
: 怪獸文(u1,u2,u1)
<21> 01 000D
5374 6163 6b4d 6170 5461 626c 65
-> StackMapTable
: 怪獸文(u1,u2,u1)
<22> 07 001D : 怪獸名字系列信息(u1,u2)
<23> 07 0022 : 怪獸名字系列信息(u1,u2)
<24> 01 000A
536f 7572 6365 4669 6c65 -> SourceFile
: 怪獸文(u1,u2,u1)
<25> 01 000D
43 6f6d 7075 7465 722e 6a61 7661
-> Computer.java
: 怪獸文(u1,u2,u1)
<26> 0C 000D 0023: 怪獸部位類型信息
<27> 0C 0008 0009: 怪獸部位類型信息
<28> 01 000A
70 6c61 7920 6761 6d65 73
->play games
: 怪獸文(u1,u2,u1)
<29> 01 0013
6a61 7661 2f6c 616e 672f
4578 6365 7074 696f 6e
-> java/lang/Exception
: 怪獸文(u1,u2,u1)
<30> 0C 0024 0023: 字段或者方法的類型信息
<31> 01 001F
4a 564d 4c65 6172 6e69 6e67 2f73 6978
4368 6170 7465 722f 436f 6d70 7574 6572
-> JVMLearning/sixChapter/Computer (類的全限定名)
: 怪獸文(u1,u2,u1)
<32> 01 0010
6a 6176 612f 6c61 6e67 2f4f 626a
6563 74
-> java/lang/Object (父類的權限定名)
: 怪獸文(u1,u2,u1)
<33> 01 0008
4d69 6e69 4a61 636b
-> MiniJack (static final字段的名稱)
: 怪獸文(u1,u2,u1)
<34> 01 0013
6a 6176 612f 6c61 6e67 2f54 6872 6f77
6162 6c65
-> java/lang/Throwable (異常類的全限定名)
: 怪獸文(u1,u2,u1)
<35> 01 0003
28 29 56 -> ()V (方法的描述,無參數和空返回值)
: 怪獸文(u1,u2,u1)
<36> 01 000F
70 7269 6e74 5374
6163 6b54 7261 6365
-> printStackTrace
: 怪獸文(u1,u2,u1)
經過這么多的分析之后,不知不覺,天色已暗。這時二狗突然想到一個問題,既然這些晶石是組成這只怪獸的組件,那么我能不能用一種方法再把他給重新組合起來,讓其重新復活?如果復活以后,我該怎么操控他呢?他會被我操控嗎?
其實二狗肚子早就餓了,于是正準備合上書本的時候,突然留意到了一處密文,上面寫著
在所有的晶石中,還有一塊不太起眼但是十分重要的晶石,上面刻有該戰斗機器的操作權限信息(access_flags)
"操作權限信息"!!!,真是得來全不費工夫,二狗想看看究竟是怎樣的一個數據才可以操作,只見上邊寫到只有當晶石上刻有"0x0001"的時候才可以由任何人操作,還有一些其他操作權限說明,不過這個時候二狗已經顧不了看那么多了,知道這個就可以了。于是他飛速地又跑到了那堆晶石旁,經過好大一會的搜尋,才最終找到,定睛一看,嘿!"0x0001",此時二狗感覺一陣陣的陽光普照,春暖花開。
在得到這個令人欣慰的結果之后,二狗歡心滿意地出去吃了頓飯,回來之后,又借著月光解讀下去。
00 06
這一項表示這只怪獸的描述信息,可以根據這個數據在剛才那25個部分里面找到一些說明。
0007
這一項表示這只怪獸的上一代怪獸的信息,根據這個數據可以在剛才的那25個部分的描述里找到一些上一代的蛛絲馬跡。
0000
這一項表示該怪獸屬于自動產生動力,不需要對外接口,其實這個描述二狗沒怎么看明白
0002 0002 0008 0009 0019 000A 0009 0001 000B 00000002 000C
這一項表示該怪獸身上有兩個重要的組件,并分別對其進行了描述
0003 0001 000D 000E 0001 000F 0000002A 0002 0002 0000000A
這句表示這只怪獸一共有三個具有威脅性的武器,這是其一
2A B7 00 01 2A 2B B5 00 02 B1
表示怪獸是如何來進行使用武器的
0000 0001 0010 0000000E 0003
這些表示的信息不是特別重要,二狗自動將其忽略了。
0001 0011 0012 0001 000F 00000021 0001 0002 00000005
這是怪獸的第二項武器的描述
12 03 4C 2B B0
表示怪獸是如何來進行使用武器的
0000 0001 0010 0000000A 0002
這些表示的信息不是特別重要,二狗又自動將其忽略了。
0001 0013 0014 0001 000F 0000007A 0001 0005 0000001A
這是怪獸的第三項武器的描述
04 3C 1B 3D 05 3C 1C AC 4D 2C B6 00 05 03 3E 05 3C 1D AC 3A 04 05 3C 19 04 BF
表示怪獸是如何來進行使用武器的
0004
start_pc end_pc handler_pc catch_type
0000 0004 0008 0004
0000 0004 0013 0000
0008 000F 0013 0000
0013 0015 0013 0000
這句表示當這只怪獸發生故障的時候,要怎樣自動去操作。
0002 0010 0000001E 0007
0000 0017
0002 0018
0004 001D
0008 0019
0009 001A
000D 001B
000F 001D
這些代表這只怪獸內部的復雜網絡與外部組件的關聯關系。
不知不覺,太陽逐漸在東方升起了曙光,二狗知道自己研究了一晚上,逐漸他感覺自己腳掌發麻,渾身無力,這次比上次剛回來還要虛弱,就這樣,他一下躺倒在了這堆晶石旁邊。二狗眼睛微閉,嘴里一直在小聲地說:老子我他媽再也編不下去了!