一、介紹:
在程式執行期間才進行編譯是一個可以靈活執行程式的方法
而在程式執行期間才讀取類別是一個可以節省部分記憶體的方法
程式內應該會有被設定成靜態(static)的方法或物件,靜態的方法在程式執行的最一開始就會被賦予記憶體,除非該值未空(null),但有時會想使用靜態(static)的變數但又只是在某些時候才執行幾次,而大部分時間都用不到時,就可以使用類別讀取器(ClassLoader)來讀取,並用反射功能來執行,這裡使用了java.lang的ClassLoader和java.net的URLClassLoader來讀取類別
而如果想要在執行期間編修邊測試,在運行時間過長或過於複雜時,在程式執行間編譯檔案室一個很不錯的做法,這裡使用javax.tools的一系列類別來做編譯
hi.java的內容
用javax.tools來編譯和java的javac編譯有很大的不同
javac的編譯是使用javac.exe執行檔來編譯,在java程式內部靈活性不高,javax.tools的編譯是純java的編譯,因此,可以在java程式內部輕鬆的直接運用,靈活性很高。
另外一個說法,用javac來編譯,每編譯一次就會開啟一個JVM(Java Virtual Machine),javax.tools則是直接在原JVM內編譯,效率比較高