深入解析Java編譯器:源碼剖析與實例詳解

深入解析Java編譯器:源碼剖析與實例詳解

《深入解析Java編譯器:源碼剖析與實例詳解》一書由機械工業出版社出版發行。

基本介紹

  • 中文名:深入解析Java編譯器:源碼剖析與實例詳解 
  • 作者:馬智 
  • 出版社:機械工業出版社 
  • 出版時間:2019年
  • 頁數:668 頁
  • 定價:179 元
  • 開本:16 開
  • 裝幀:平裝
  • ISBN:9787111643388
內容簡介,圖書目錄,名人推薦,作者簡介,

內容簡介

《深入解析Java編譯器:源碼剖析與實例詳解》以工業級編譯器Javac的原始碼為基礎,詳細介紹了詞法分析、語法分析、語義分析及代碼生成
等各個階段的具體實現,同時對重點原始碼的實現進行了詳細解讀,讓讀者能真正掌握從Java原始碼變為Class檔案的每個過程。
《深入解析Java編譯器:源碼剖析與實例詳解》共18章,章節的前後順序與Javac編譯Java原始碼的順序嚴格對應,涵蓋的主要內容有Javac介紹、Javac檔案系統、詞法分析、語法分析之認識樹節點、語法分析之建立抽象語法樹、符號表的組織、填充符號表、插入式註解的實現、語義分析之類型轉換、語義分析之語法檢查、語義分析之引用消解、語義分析之語法樹標註、泛型的實現、數據流檢查、語法糖去除、位元組碼指令生成、重要結構的位元組碼指令生成、生成Class檔案。同時,為了讀者能更好地查閱相關信息,《深入解析Java編譯器:源碼剖析與實例詳解》在附錄中給出了Javac命令、文法、類型常見操作、符號常見操作和虛擬機位元組碼指令表的相關內容。
《深入解析Java編譯器:源碼剖析與實例詳解》語言簡潔,實例豐富,適合Java從業人員閱讀,可以幫助他們深入理解Javac如何支持Java語言的諸多特性,如泛型等;也適合對編譯器感興趣的讀者閱讀,可以幫助他們真正掌握如何將編譯器相關的理論知識套用到開發實踐中。

圖書目錄

第1章 Javac介紹.... 1
1.1 初識Javac. 1
1.2 Javac源碼與調試... 4
1.3 Javac命令... 7
第2章 Javac檔案系統.... 12
2.1 檔案相關實現類... 12
2.2 檔案的管理... 25
2.2.1 獲取JavacFileManager對象... 25
2.2.2 StandardLocation類... 28
2.2.3 JavacFileManager類... 31
第3章 詞法分析.... 38
3.1 字元編碼... 38
3.2 獲取字元輸入流... 40
3.3 Token與Name. 43
3.3.1 Token介紹... 44
3.3.2 Name對象的生成與存儲... 47
3.3.3 Name映射為Token. 51
3.4 生成Token流... 52
第4章 語法分析之認識樹節點.... 67
4.1 定義及聲明... 68
4.1.1 JCCompilationUnit類... 68
4.1.2 JCImport類... 69
4.1.3 JCClassDecl類... 70
4.1.4 JCModifiers類... 71
4.1.5 JCTypeParameter類... 72
4.1.6 JCVariableDecl類... 72
4.1.7 JCMethodDecl類... 74
4.2 語句... 75
4.2.1 JCBlock類... 75
4.2.2 JCIf類... 76
4.2.3 JCWhileLoop、JCDoWhileLoop、JCForLoop與JCEnhancedForLoop類... 78
4.2.4 JCSwitch與JCCase類... 79
4.2.5 JCTry、JCCatch與JCThrow類... 81
4.2.6 JCLabeledStatement、JCReturn、JCContinue與JCBreak類... 82
4.2.7 JCSynchronized類... 83
4.2.8 JCAssert類... 83
4.3 表達式... 83
4.3.1 基本表達式... 84
4.3.2 含運算符的表達式... 88
4.3.3 類型相關表達式... 94
4.3.4 註解表達式... 97
4.4 生成樹節點... 98
第5章 語法分析之建立抽象語法樹.... 101
5.1 定義及聲明的抽象語法樹... 101
5.2 語句的抽象語法樹... 112
5.3 表達式的抽象語法樹... 121
5.3.1 基本表達式... 122
5.3.2 含有運算符的表達式... 134
5.4 遍歷抽象語法樹... 140
第6章 符號表的組織.... 143
6.1 符號的定義... 143
6.1.1 Symbol類... 144
6.1.2 TypeSymbol及其子類... 150
6.1.3 VarSymbol類... 154
6.1.4 MethodSymbol及OperatorSymbol類... 154
6.2 符號表的組織... 160
6.2.1 Env類介紹... 160
6.2.2 AttrContext類介紹... 162
6.2.3 Scope類介紹... 163
6.2.4 符號表的建立... 164
6.3 類型的定義... 169
6.3.1 普通類型的定義... 169
6.3.2 泛型相關類型的定義... 175
第7章 填充符號表.... 180
7.1 依賴的處理... 180
7.1.1 創建包或類符號... 180
7.1.2 輸入包或類下的成員符號... 184
7.2 符號輸入的第一階段... 189
7.2.1 Enter類... 190
7.2.2 visitTopLevel()方法... 192
7.2.3 visitClassDef()方法... 193
7.2.4 visitTypeParameter()方法... 196
7.3 符號輸入第二階段... 197
7.3.1 MemberEnter類... 197
7.3.2 visitImport()方法... 200
7.3.3 visitMethodDef()方法... 207
7.3.4 visitVarDef()方法... 209
第8章 插入式註解的實現.... 211
8.1 註解處理器基礎... 211
8.1.1 編寫註解處理器... 211
8.1.2 註解配置... 215
8.1.3 工具類... 215
8.2 初始化註解處理器... 222
8.3 運行註解處理器... 226
第9章 語義分析之類型轉換.... 233
9.1 類型轉換的種類... 233
9.2 賦值轉換... 245
9.3 方法調用轉換... 253
9.4 強制類型轉換... 254
9.5 數字提升... 266
第10章 語義分析之語法檢查.... 269
10.1 類型定義的檢查... 269
10.1.1 父類及實現接口的檢查... 269
10.1.2 類型定義的唯一性檢查... 273
10.1.3 類型中方法的兼容性檢查... 276
10.1.4 類型中實現方法的檢查... 287
10.2 變數定義的檢查... 294
10.3 方法定義的檢查... 296
10.3.1 方法的唯一性檢查... 296
10.3.2 方法的隱藏... 298
10.3.3 方法的覆寫... 303
第11章 語義分析之引用消解.... 307
11.1 Resolve類介紹... 307
11.2 類型引用的消解... 310
11.3 變數引用的消解... 320
11.4 方法引用的消解... 323
第12章 語義分析之語法樹標註.... 345
12.1 Attr類介紹... 346
12.2 表達式相關樹節點的標註... 348
12.2.1 JCUnary樹節點標註... 348
12.2.2 JCBinary樹節點的標註... 350
12.2.3 JCAssignOp樹節點的標註... 351
12.3 JCIdent樹節點的標註... 351
12.4 JCFieldAccess樹節點的標註... 354
第13章 泛型的實現.... 361
13.1 泛型類型... 361
13.2 泛型方法... 364
13.2.1 類型推斷... 365
13.2.2 鑽石語法... 383
13.3 泛型擦除... 386
第14章 數據流檢查.... 396
14.1 Flow類介紹... 396
14.1.1 語句的活躍性分析... 396
14.1.2 變數賦值檢查... 398
14.1.3 異常檢查... 405
14.2 if語句的分析... 405
14.2.1 if語句... 405
14.2.2 一元表達式與if語句... 409
14.2.3 二元表達式與if語句... 410
14.2.4 三元表達式與if語句... 412
14.3 循環語句的分析... 413
14.3.1 for語句... 413
14.3.2 中斷循環語句... 416
14.4 try語句與throw語句的分析... 419
14.4.1 拋出異常... 419
14.4.2 異常檢查... 424
14.4.3 變數賦值狀態及語句的活躍性... 430
第15章 語法糖去除.... 435
15.1 簡單語法糖... 436
15.1.1 變長參數... 436
15.1.2 條件編譯... 437
15.1.3 自動裝箱與拆箱... 438
15.2 語句語法糖... 440
15.2.1 foreach語句... 440
15.2.2 switch語句... 442
15.2.3 try-with-resources語句... 447
15.3 枚舉類語法糖... 452
15.4 內部類語法糖... 453
15.4.1 調用私有構造方法... 454
15.4.2 引用成員... 457
15.4.3 super關鍵字引用父類成員... 470
15.4.4 訪問自由變數... 472
第16章 位元組碼指令生成.... 486
16.1 位元組碼指令集... 486
16.2 生成位元組碼指令... 492
16.2.1 實現本地變數表... 492
16.2.2 實現運算元棧... 495
16.2.3 常量池信息的存儲... 497
16.2.4 Code類介紹... 499
16.3 Gen類介紹... 502
16.4 可定址實體Item.. 506
16.4.1 LocalItem類... 508
16.4.2 ImmediateItem類... 512
16.4.3 StackItem類... 514
16.4.4 AssignItem類... 515
16.4.5 StaticItem類... 517
16.4.6 MemberItem類... 520
16.4.7 SelfItem類... 523
16.4.8 IndexedItem類... 524
第17章 重要結構的位元組碼指令生成.... 527
17.1 控制轉移指令與地址回填... 527
17.1.1 認識控制轉移指令... 527
17.1.2 地址回填... 529
17.2 語句的條件判斷表達式... 530
17.2.1 CondItem類... 530
17.2.2 一元與二元條件判斷表達式... 533
17.2.3 三元條件判斷表達式... 534
17.3 if語句... 536
17.4 循環語句... 537
17.5 switch語句... 539
17.6 異常與finally語句... 545
17.6.1 異常的拋出... 545
17.6.2 異常的捕獲與finally語句... 545
第18章 生成Class檔案.... 553
18.1 Class檔案的結構... 553
18.2 魔數與版本... 556
18.3 常量池... 556
18.4 類定義的基本信息... 562
18.4.1 訪問標識符... 562
18.4.2 類、父類及接口集合... 564
18.5 欄位集合... 565
18.6 方法集合... 570
18.7 類屬性集合... 575
18.8 描述符和簽名... 581
18.8.1 描述符... 581
18.8.2 簽名... 582
18.8.3 描述符與簽名的實現... 585
附錄A Javac命令.... 589
附錄B 文法.... 592
附錄C 類型常見操作.... 600
C.1 supertype()方法... 600
C.2 interfaces()方法... 604
C.3 asSuper()方法... 606
C.4 asOuterSuper()方法... 608
C.5 isSameType()方法... 609
C.6 L()與U()方法... 615
C.7 lowerBound()與upperBound()方法... 616
C.8 containsType()方法... 617
C.9 hasSameArgs()方法... 621
C.10 subst()方法... 623
C.11 memberType()方法... 626
C.12 erasure()與erasureRecursive()方法... 628
附錄D 符號常見操作.... 632
D.1 isInheritedIn()方法... 632
D.2 hiddenIn()方法... 633
D.3 isMemberOf()方法... 634
D.4 overrides()方法... 635
D.5 implementation()方法... 639
附錄E 虛擬機位元組碼指令表.... 645
E.1 載入與存儲指令... 645
E.2 運算指令... 648
E.3 類型轉換指令... 650
E.4 對象操作指令... 651
E.5 運算元棧管理指令... 652
E.6 控制轉移指令... 652
E.7 方法調用和返回指令... 653
E.8 異常拋出指令... 654
E.9 同步指令... 654

名人推薦

在日常的程式開發中,開發人員可能很少思考Javac編譯器是如何運行的,以及如何對代碼進行最佳化。《深入解析Java編譯器:源碼剖析與實例詳解》從編譯器源碼剖析的角度,詳細介紹了Javac如何實現編譯,以及如何結合Java的特性而實現編譯最佳化等相關內容,從而讓開發者能更好地掌控Java這個“神獸”,編寫出更加利於編譯器最佳化的高性能代碼。
——掌游天下玉米廣告部門經理 姚寶栓
馬智用他的專業知識和豐富的開發經驗,深入剖析了工業級編譯器Javac的源碼實現過程。對於任何一個使用Java語言做開發的人來說,《深入解析Java編譯器:源碼剖析與實例詳解》可以幫助他們更加深入地理解Javac編譯器,從而提高開發水平,提升職場競爭力。
——螞蟻金服工程師 陳峰
《深入解析Java編譯器:源碼剖析與實例詳解》將Java語言複雜的底層編譯邏輯用簡單明了的語言和生動的圖示進行講解,讀後給人一種“大徹大悟”的感覺,推薦給那些想要透徹理解Java語言的人閱讀。
——京東數科高級工程師 王帥

作者簡介

馬智 畢業於天津工業大學。在校期間所修專業為軟體工程。畢業後一直從事軟體開發相關工作。先後在掌游天下、京東集團任軟體研發工程師。對程式語言的底層實現有濃厚的興趣,尤其對編譯原理有較為全面和深入的研究。深入研究過openJDK的原始碼實現,其中包括Javac編譯器的原始碼實現。

相關詞條

熱門詞條

聯絡我們