java編譯器的一些感悟
為了準備面試最近複習和深入學習了向上/下轉型,泛型,可變引數,發現,我們很多時候,這些語法特性都是在編譯器層面的:編譯器會背地裡將我們的諸如此類的語法轉化成為符合直譯器的格式,所以等到達解析器執行時已經是常規格式的機器碼。例如,泛型的話編譯器會通過擦除(erasure)的前端處理,固定上、下限等操作令我們寫的原始碼變回我們的常規程式碼;可變引數的話,編譯器背地裡就自動將匹配好的引數裝到一個陣列中,於是又變回了我們的常規程式碼。在編碼中,正式由於編譯器的這些“背地裡”的行為,我們可以發明很多很好的設計模式,例如向上轉型在工廠模式,動態代理等中起到的核心作用。
上述的都是編譯器的層面的特性,於是,很容易聯想到:如果我們能夠繞過編譯器的話,就可以做到很多不符合語法特性的事。例如,泛型:通過反射來繞過編譯器。
舉個例子:
public class Info{
public static void main(String[] args){
List<String> list_str = new ArrayList<String>();
list_str.add(“apple”);
list_str.add(“orange”);
//list_str.add(new Object());//編譯錯誤
//利用反射,可以繞過編譯器,因為反射是runtime的行為而非編譯期的行為:
try {
list_str.getClass().getMethod("add", Object.class).invoke(list_str, new Object());
} catch (IllegalAccessException | IllegalArgumentException
| InvocationTargetException | NoSuchMethodException
| SecurityException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
類似的案例還有很多。
嗚呼!其實我們很多時候都是在和編譯器在博弈而已。。。。。。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/29900383/viewspace-1735710/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- IDEA報錯java: 編譯失敗: 內部 java 編譯器錯誤IdeaJava編譯
- 配置pycharm 編譯器時遇到的一些問題PyCharm編譯
- Java的指令碼機制、編譯器APIJava指令碼編譯API
- Java編譯與反編譯Java編譯
- nanoPI編譯核心的一些recordNaN編譯
- ☕【Java技術指南】「編譯器專題」深入分析探究“靜態編譯器”(JAVA\IDEA\ECJ編譯器)是否可以實現程式碼優化?Java編譯Idea優化
- 深入剖析Java即時編譯器(上)Java編譯
- 編譯器的自展和自舉、交叉編譯編譯
- 淺談彙編器、編譯器和直譯器編譯
- JWebAssembly:Java 位元組碼到 WebAssembly 編譯器WebJava編譯
- Java程式碼的編譯與反編譯那些事兒Java編譯
- Java中的編譯器外掛開發與應用Java編譯
- 在C,C++,java和python執行時直譯器和編譯器的區別C++JavaPython編譯
- vue編譯器Vue編譯
- CUDAFORTRAN編譯器編譯
- 如何讓Java編譯器幫你寫程式碼Java編譯
- java反編譯工具Java編譯
- (二)工作三年的一些感悟
- 專案中使用 TypeScript 的一些感悟TypeScript
- 從技術走向管理的一些感悟
- iOS開發者的一些前端感悟iOS前端
- Go編譯器簡介【譯】Go編譯
- Java編譯和執行的命令Java編譯
- 程式碼線上編譯器(上)- 編輯及編譯編譯
- CSS預編譯器CSS編譯
- 記錄一些工程編譯問題編譯
- ?【Java技術專區】「編譯器專題」重塑認識Java編譯器的執行過程(消除陣列邊界檢查+公共子表示式)!Java編譯陣列
- Java動態編譯優化——提升編譯速度(N倍)Java編譯優化
- GCC編譯器背後的故事GC編譯
- 編譯器的符號表管理編譯符號
- JavascriptAST編譯器的研究學習JavaScriptAST編譯
- 編譯執行、解釋執行的一些思考編譯
- 深入理解Java的動態編譯Java編譯
- 用Java寫編譯器(1)- 詞法和語法分析Java編譯語法分析
- 深入理解Java虛擬機器之自己編譯JDKJava虛擬機編譯JDK
- 源語言、目標語言、翻譯器、編譯器、直譯器編譯
- [譯] 理解編譯器 —— 從人類的角度(版本 2)編譯
- Rust 編譯器入門Rust編譯
- ARM 之主流編譯器編譯