javac 編譯過程

一、解析與填充符號表:
1. 語法、詞法分析:
a) 語法分析:將源代碼字符流轉換為標記(Token:編譯過程最小元素)集合。
b) 詞法分析:根據標記序列構造抽象語法樹(AST:用來描述程序代碼語法結構的樹形表示方式,每一個節點代表程序中的一個語法結構。
2. 填充符號表:
一組符號地址和符號信息組成的表格。
二、注解處理器:
插入式注解處理器,編譯期間處理注解,讀取,修改,刪除語法樹中的任意元素,編譯器會根據修改與否,重新回到解析及符號表填充階段進行處理。
initProcessAnnotations,processAnnotation,doProcessing。
三、語義分析,字節碼生成(邏輯驗證):
1. 標注檢查:
包括變量使用前是否已聲明,變量與賦值之間的數據類型是否匹配 +++ 常量折疊:int a = 1 + 2 ==> int a = 3
2. 數據集控制流分析:
包括,局部變量是否賦值,方法路徑返回值驗證,受檢異常的正確處理。
3. 解語法糖:
泛型,裝箱拆箱,for循環,條件編譯等
4. 字節碼生成:
轉換字節寫磁盤。<init>()<cinit>()相關處理。