
掃描右側(cè)圖片或微信搜索 “ Java技術(shù)分享屋 ” ,回復(fù) “ 驗(yàn)證碼 ” ,獲取驗(yàn)證密碼。
本資料僅供讀者預(yù)覽及學(xué)習(xí)交流使用,不能用于商業(yè)用途,請(qǐng)?jiān)谙螺d后24小時(shí)內(nèi)刪除。如果喜歡,請(qǐng)購(gòu)買正版!
一.資料截圖
二.資料介紹
本書針對(duì)Java語(yǔ)言的編譯器源碼進(jìn)行深度剖析,所以本書面向的讀者主要是那些想深入研究Java語(yǔ)言運(yùn)行原理的人。另外本書還可以用作編譯原理的學(xué)習(xí),通過(guò)強(qiáng)實(shí)踐來(lái)達(dá)到學(xué)習(xí)的目的,所以對(duì)于想學(xué)習(xí)編譯原理的人,如軟件專業(yè)的學(xué)生,也是一個(gè)很好的選擇。
本書共18章,5個(gè)附錄,涵蓋-Javac文件系統(tǒng)、詞法分析、語(yǔ)法分析、符號(hào)表、語(yǔ)義分析、泛型、數(shù)據(jù)流、語(yǔ)法糖、字節(jié)碼、Class文件等大量?jī)?nèi)容。由于Java編譯器有10萬(wàn)行以上的代碼,并且邏輯周密,細(xì)節(jié)眾多。為了能夠讓讀者更好的理解其中的要點(diǎn),本書將會(huì)有大量的配圖和實(shí)例,并且要對(duì)重點(diǎn)源代碼展開(kāi)細(xì)致的講解。
三.資料目錄
前言
第1章 Javac介紹 1
1.1 初識(shí)Javac 1
1.2 Javac源碼與調(diào)試 4
1.3 Javac命令 7
第2章 Javac文件系統(tǒng) 12
2.1 文件相關(guān)實(shí)現(xiàn)類 12
2.2 文件的管理 25
2.2.1 獲取JavacFileManager對(duì)象 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對(duì)象的生成與存儲(chǔ) 47
3.3.3 Name映射為Token 51
3.4 生成Token流 52
第4章 語(yǔ)法分析之認(rèn)識(shí)樹(shù)節(jié)點(diǎn) 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 語(yǔ)句 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 表達(dá)式 83
4.3.1 基本表達(dá)式 84
4.3.2 含運(yùn)算符的表達(dá)式 88
4.3.3 類型相關(guān)表達(dá)式 94
4.3.4 注解表達(dá)式 97
4.4 生成樹(shù)節(jié)點(diǎn) 98
第5章 語(yǔ)法分析之建立抽象語(yǔ)法樹(shù) 101
5.1 定義及聲明的抽象語(yǔ)法樹(shù) 101
5.2 語(yǔ)句的抽象語(yǔ)法樹(shù) 112
5.3 表達(dá)式的抽象語(yǔ)法樹(shù) 121
5.3.1 基本表達(dá)式 122
5.3.2 含有運(yùn)算符的表達(dá)式 134
5.4 遍歷抽象語(yǔ)法樹(shù) 140
第6章 符號(hào)表的組織 143
6.1 符號(hào)的定義 143
6.1.1 Symbol類 144
6.1.2 TypeSymbol及其子類 150
6.1.3 VarSymbol類 154
6.1.4 MethodSymbol及OperatorSymbol類 154
6.2 符號(hào)表的組織 160
6.2.1 Env類介紹 160
6.2.2 AttrContext類介紹 162
6.2.3 Scope類介紹 163
6.2.4 符號(hào)表的建立 164
6.3 類型的定義 169
6.3.1 普通類型的定義 169
6.3.2 泛型相關(guān)類型的定義 175
第7章 填充符號(hào)表 180
7.1 依賴的處理 180
7.1.1 創(chuàng)建包或類符號(hào) 180
7.1.2 輸入包或類下的成員符號(hào) 184
7.2 符號(hào)輸入的第一階段 189
7.2.1 Enter類 190
7.2.2 visitTopLevel()方法 192
7.2.3 visitClassDef()方法 193
7.2.4 visitTypeParameter()方法 196
7.3 符號(hào)輸入第二階段 197
7.3.1 MemberEnter類 197
7.3.2 visitImport()方法 200
7.3.3 visitMethodDef()方法 207
7.3.4 visitVarDef()方法 209
第8章 插入式注解的實(shí)現(xiàn) 211
8.1 注解處理器基礎(chǔ) 211
8.1.1 編寫注解處理器 211
8.1.2 注解配置 215
8.1.3 工具類 215
8.2 初始化注解處理器 222
8.3 運(yùn)行注解處理器 226
第9章 語(yǔ)義分析之類型轉(zhuǎn)換 233
9.1 類型轉(zhuǎn)換的種類 233
9.2 賦值轉(zhuǎn)換 245
9.3 方法調(diào)用轉(zhuǎn)換 253
9.4 強(qiáng)制類型轉(zhuǎn)換 254
9.5 數(shù)字提升 266
第10章 語(yǔ)義分析之語(yǔ)法檢查 269
10.1 類型定義的檢查 269
10.1.1 父類及實(shí)現(xiàn)接口的檢查 269
10.1.2 類型定義的唯一性檢查 273
10.1.3 類型中方法的兼容性檢查 276
10.1.4 類型中實(shí)現(xiàn)方法的檢查 287
10.2 變量定義的檢查 294
10.3 方法定義的檢查 296
10.3.1 方法的唯一性檢查 296
10.3.2 方法的隱藏 298
10.3.3 方法的覆寫 303
第11章 語(yǔ)義分析之引用消解 307
11.1 Resolve類介紹 307
11.2 類型引用的消解 310
11.3 變量引用的消解 320
11.4 方法引用的消解 323
第12章 語(yǔ)義分析之語(yǔ)法樹(shù)標(biāo)注 345
12.1 Attr類介紹 346
12.2 表達(dá)式相關(guān)樹(shù)節(jié)點(diǎn)的標(biāo)注 348
12.2.1 JCUnary樹(shù)節(jié)點(diǎn)標(biāo)注 348
12.2.2 JCBinary樹(shù)節(jié)點(diǎn)的標(biāo)注 350
12.2.3 JCAssignOp樹(shù)節(jié)點(diǎn)的標(biāo)注 351
12.3 JCIdent樹(shù)節(jié)點(diǎn)的標(biāo)注 351
12.4 JCFieldAccess樹(shù)節(jié)點(diǎn)的標(biāo)注 354
第13章 泛型的實(shí)現(xiàn) 361
13.1 泛型類型 361
13.2 泛型方法 364
13.2.1 類型推斷 365
13.2.2 鉆石語(yǔ)法 383
13.3 泛型擦除 386
第14章 數(shù)據(jù)流檢查 396
14.1 Flow類介紹 396
14.1.1 語(yǔ)句的活躍性分析 396
14.1.2 變量賦值檢查 398
14.1.3 異常檢查 405
14.2 if語(yǔ)句的分析 405
14.2.1 if語(yǔ)句 405
14.2.2 一元表達(dá)式與if語(yǔ)句 409
14.2.3 二元表達(dá)式與if語(yǔ)句 410
14.2.4 三元表達(dá)式與if語(yǔ)句 412
14.3 循環(huán)語(yǔ)句的分析 413
14.3.1 for語(yǔ)句 413
14.3.2 中斷循環(huán)語(yǔ)句 416
14.4 try語(yǔ)句與throw語(yǔ)句的分析 419
14.4.1 拋出異常 419
14.4.2 異常檢查 424
14.4.3 變量賦值狀態(tài)及語(yǔ)句的活躍性 430
第15章 語(yǔ)法糖去除 435
15.1 簡(jiǎn)單語(yǔ)法糖 436
15.1.1 變長(zhǎng)參數(shù) 436
15.1.2 條件編譯 437
15.1.3 自動(dòng)裝箱與拆箱 438
15.2 語(yǔ)句語(yǔ)法糖 440
15.2.1 foreach語(yǔ)句 440
15.2.2 switch語(yǔ)句 442
15.2.3 try-with-resources語(yǔ)句 447
15.3 枚舉類語(yǔ)法糖 452
15.4 內(nèi)部類語(yǔ)法糖 453
15.4.1 調(diào)用私有構(gòu)造方法 454
15.4.2 引用成員 457
15.4.3 super關(guān)鍵字引用父類成員 470
15.4.4 訪問(wèn)自由變量 472
第16章 字節(jié)碼指令生成 486
16.1 字節(jié)碼指令集 486
16.2 生成字節(jié)碼指令 492
16.2.1 實(shí)現(xiàn)本地變量表 492
16.2.2 實(shí)現(xiàn)操作數(shù)棧 495
16.2.3 常量池信息的存儲(chǔ) 497
16.2.4 Code類介紹 499
16.3 Gen類介紹 502
16.4 可尋址實(shí)體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章 重要結(jié)構(gòu)的字節(jié)碼指令生成 527
17.1 控制轉(zhuǎn)移指令與地址回填 527
17.1.1 認(rèn)識(shí)控制轉(zhuǎn)移指令 527
17.1.2 地址回填 529
17.2 語(yǔ)句的條件判斷表達(dá)式 530
17.2.1 CondItem類 530
17.2.2 一元與二元條件判斷表達(dá)式 533
17.2.3 三元條件判斷表達(dá)式 534
17.3 if語(yǔ)句 536
17.4 循環(huán)語(yǔ)句 537
17.5 switch語(yǔ)句 539
17.6 異常與finally語(yǔ)句 545
17.6.1 異常的拋出 545
17.6.2 異常的捕獲與finally語(yǔ)句 545
第18章 生成Class文件 553
18.1 Class文件的結(jié)構(gòu) 553
18.2 魔數(shù)與版本 556
18.3 常量池 556
18.4 類定義的基本信息 562
18.4.1 訪問(wèn)標(biāo)識(shí)符 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 描述符與簽名的實(shí)現(xiàn) 585
附錄A Javac命令 589
附錄B 文法 592
附錄C 類型常見(jiàn)操作 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 符號(hào)常見(jiàn)操作 632
D.1 isInheritedIn()方法 632
D.2 hiddenIn()方法 633
D.3 isMemberOf()方法 634
D.4 overrides()方法 635
D.5 implementation()方法 639
附錄E 虛擬機(jī)字節(jié)碼指令表 645
E.1 加載與存儲(chǔ)指令 645
E.2 運(yùn)算指令 648
E.3 類型轉(zhuǎn)換指令 650
E.4 對(duì)象操作指令 651
E.5 操作數(shù)棧管理指令 652
E.6 控制轉(zhuǎn)移指令 652
E.7 方法調(diào)用和返回指令 653
E.8 異常拋出指令 654
E.9 同步指令 654