怎麼用javaapi編譯程序
JAVA之所以能實現一次編譯,到處運行,是因為JAVA在每個系統平台上都有JAVA虛擬機(JVM),JAVA編譯的中間文件class是由JAVA虛擬機在運行時動態轉換為對應平台的機器代碼.
Java是一種可以撰寫跨平台應用程序的面向對象的程序設計語言。Java 技術具有卓越的通用性、高效性、平台移植性和安全性,廣泛應用於PC、數據中心、游戲控制台、科學超級計算機、行動電話和互聯網,同時擁有全球最大的開發者專業社群。
Java 由四方面組成:
『貳』 Java榪涢樁錛歋E6璋冪敤緙栬瘧鍣ㄧ殑涓ょ嶆柟娉昜1]
銆銆鍦ㄥ緢澶欽ava搴旂敤涓闇瑕佸湪紼嬪簭涓璋冪敤Java緙栬瘧鍣ㄦ潵緙栬瘧鍜岃繍琛 浣嗗湪鏃╂湡鐨勭増鏈涓錛圝ava SE 鍙婁互鍓嶇増鏈錛変腑鍙鑳介氳繃tools jar涓鐨 sun tools javac鍖呮潵璋冪敤Java緙栬瘧鍣 浣嗙敱浜巘ools jar涓嶆槸鏍囧噯鐨凧ava搴 鍦ㄤ嬌鐢ㄦ椂蹇呴』瑕佽劇疆榪欎釜jar鐨勮礬寰 鑰屽湪Java SE 涓涓烘垜浠鎻愪緵浜嗘爣鍑嗙殑鍖呮潵鎿嶄綔Java緙栬瘧鍣 榪欏氨鏄痡avax tools鍖 浣跨敤榪欎釜鍖 鎴戜滑鍙浠ヤ笉鐢ㄥ皢jar鏂囦歡璺寰勬坊鍔犲埌classpath涓浜
銆銆涓 浣跨敤JavaCompiler鎺ュ彛鏉ョ紪璇慗ava婧愮▼搴
銆銆浣跨敤Java API鏉ョ紪璇慗ava婧愮▼搴忔湁寰堝氭柟娉 鐜板湪璁╂垜浠鏉ョ湅涓縐嶆渶綆鍗曠殑鏂規硶 閫氳繃JavaCompiler榪涜岀紪璇
銆銆鎴戜滑鍙浠ラ氳繃ToolProvider綾葷殑闈欐佹柟娉昰etSystemJavaCompiler鏉ュ緱鍒頒竴涓狫avaCompiler鎺ュ彛鐨勫疄渚
銆銆JavaCompiler piler = ToolProvider getSystemJavaCompiler();
銆銆JavaCompiler涓鏈鏍稿績鐨勬柟娉曟槸run 閫氳繃榪欎釜鏂規硶鍙浠ョ紪璇慾ava婧愮▼搴 榪欎釜鏂規硶鏈 涓鍥哄畾鍙傛暟鍜 涓鍙鍙樺弬鏁幫紙鍙鍙樺弬鏁版槸浠嶫ave SE 寮濮嬫彁渚涚殑涓涓鏂扮殑鍙傛暟綾誨瀷 鐢╰ype鈥 argu琛ㄧず錛 鍓 涓鍙傛暟鍒嗗埆鐢ㄦ潵涓簀ava緙栬瘧鍣ㄦ彁渚涘弬鏁 寰楀埌Java緙栬瘧鍣ㄧ殑杈撳嚭淇℃伅浠ュ強鎺ユ敹緙栬瘧鍣ㄧ殑閿欒淇℃伅 鍚庨潰鐨勫彲鍙樺弬鏁板彲浠ヤ紶鍏ヤ竴涓鎴栧氫釜Java婧愮▼搴忔枃浠 濡傛灉run緙栬瘧鎴愬姛 榪斿洖
銆銆int run(InputStream in OutputStream out OutputStream err String arguments)
銆銆濡傛灉鍓 涓鍙傛暟浼犲叆鐨勬槸null 閭d箞run鏂規硶灝嗕互鏍囧噯鐨勮緭鍏 杈撳嚭浠f浛 鍗砈ystem in System out鍜孲ystem err 濡傛灉鎴戜滑瑕佺紪璇戜竴涓猼est java鏂囦歡 騫跺皢浣跨敤鏍囧噯杈撳叆杈撳嚭 run鐨勪嬌鐢ㄦ柟娉曞備笅
銆銆int results = tool run(null null null test java );
銆銆涓嬮潰鏄浣跨敤JavaCompiler鐨勫畬鏁翠唬鐮
銆銆import java io *;銆銆import javax tools *;銆銆public class test_pilerapi銆銆{銆 銆public static void main(String args[]) throws IOException銆 銆{銆 銆JavaCompiler piler = ToolProvider getSystemJavaCompiler();銆 銆int results = piler run(null null null test java );銆 銆System out println((results == )? 緙栬瘧鎴愬姛 : 緙栬瘧澶辮觸 );銆 銆// 鍦ㄧ▼搴忎腑榪愯宼est銆 銆Runtime run = Runtime getRuntime();銆 銆Process p = run exec( java test );銆 銆BufferedInputStream in = new BufferedInputStream(p getInputStream());銆 銆BufferedReader br = new BufferedReader(new InputStreamReader(in));銆 銆String s;銆 銆while ((s = br readLine()) != null)銆 銆System out println(s);銆 銆}銆銆}銆銆public class test銆銆{銆 銆public static void main(String[] args) throws Exception銆 銆{銆 銆System out println( JavaCompiler嫻嬭瘯鎴愬姛錛 );銆 銆}銆銆}
銆銆緙栬瘧鎴愬姛鐨勮緭鍑虹粨鏋
銆銆緙栬瘧鎴愬姛
銆銆JavaCompiler嫻嬭瘯鎴愬姛
銆銆緙栬瘧澶辮觸鐨勮緭鍑虹粨鏋
銆銆test java: : 鎵句笉鍒扮﹀彿
銆銆絎﹀彿 鏂規硶 printlnln(java lang String)
銆銆浣嶇疆 綾 java io PrintStream
銆銆System out printlnln( JavaCompiler嫻嬭瘯鎴愬姛錛 );
銆銆^
銆銆 閿欒
銆銆緙栬瘧澶辮觸
銆銆浜 浣跨敤StandardJavaFileManager緙栬瘧Java婧愮▼搴
銆銆鍦ㄧ涓閮ㄥ垎鎴戜滑璁ㄨ鴻皟鐢╦ava緙栬瘧鍣ㄧ殑鏈瀹規槗鐨勬柟娉 榪欑嶆柟娉曞彲浠ュ緢濂藉湴宸ヤ綔 浣嗗畠紜涓嶈兘鏇存湁鏁堝湴寰楀埌鎴戜滑鎵闇瑕佺殑淇℃伅 濡傛爣鍑嗙殑杈撳叆 杈撳嚭淇℃伅 鑰屽湪Java SE 涓鏈濂界殑鏂規硶鏄浣跨敤StandardJavaFileManager綾 榪欎釜綾誨彲浠ュ緢濂藉湴鎺у埗杈撳叆 杈撳嚭 騫朵笖鍙浠ラ氳繃DiagnosticListener寰楀埌璇婃柇淇℃伅 鑰孌iagnosticCollector綾誨氨鏄痩istener鐨勫疄鐜
銆銆浣跨敤StandardJavaFileManager闇瑕佷袱姝 棣栧厛寤虹珛涓涓狣iagnosticCollector瀹炰緥浠ュ強閫氳繃JavaCompiler鐨刧etStandardFileManager()鏂規硶寰楀埌涓涓猄tandardFileManager瀵硅薄 鏈鍚庨氳繃CompilationTask涓鐨刢all鏂規硶緙栬瘧婧愮▼搴
銆銆鍦ㄤ嬌鐢ㄨ繖縐嶆柟娉曡皟鐢↗ava緙栬瘧鏃舵渶澶嶆潅鐨勬柟娉曞氨鏄痝etTask 涓嬮潰璁╂垜浠璁ㄨ轟竴涓媑etTask鏂規硶 榪欎釜鏂規硶鏈夊備笅鎵紺虹殑 涓鍙傛暟
銆銆getTask(Writer out JavaFileManager fileManager 銆銆DiagnosticListener diagnosticListener 銆銆Iterable options 銆銆Iterable classes 銆銆Iterable pilationUnits)
銆銆榪欎簺鍙傛暟澶у氭暟閮藉彲涓簄ull 瀹冧滑鐨勫惈涔夋墍涓
銆銆路out: 鐢ㄤ簬杈撳嚭閿欒鐨勬祦 榛樿ゆ槸System err
銆銆路fileManager: 鏍囧噯鐨勬枃浠剁$悊
銆銆路diagnosticListener: 緙栬瘧鍣ㄧ殑榛樿よ屼負
銆銆路options: 緙栬瘧鍣ㄧ殑閫夐」
銆銆路classes 鍙備笌緙栬瘧鐨刢lass
銆銆鏈鍚庝竴涓鍙傛暟pilationUnits涓嶈兘涓簄ull 鍥犱負榪欎釜瀵硅薄淇濆瓨浜嗕綘鎯崇紪璇戠殑Java鏂囦歡
銆銆鍦ㄤ嬌鐢ㄥ畬getTask鍚 闇瑕侀氳繃StandardJavaFileManager鐨刧etJavaFileObjectsFromFiles鎴杇etJavaFileObjectsFromStrings鏂規硶寰楀埌pilationUnits瀵硅薄 璋冪敤榪欎袱涓鏂規硶鐨勬柟寮忓備笅
銆銆Iterable getJavaFileObjectsFromFiles(銆銆Iterable files)銆銆Iterable getJavaFileObjectsFromStrings(銆銆Iterable names)銆銆String[] filenames = 鈥;銆銆Iterable pilationUnits =銆銆fileManager getJavaFileObjectsFromFiles(Arrays asList(filenames));銆銆JavaCompiler CompilationTask task = piler getTask(null fileManager 銆銆diagnostics options null pilationUnits);銆銆鏈鍚庨渶瑕佸叧闂璮ileManager close();
銆銆涓嬮潰鏄涓涓瀹屾暣鐨勬紨紺虹▼搴
銆銆import java io *;銆銆import java util *;銆銆import javax tools *;銆銆public class test_pilerapi銆銆{銆 銆private static void pilejava() throws Exception銆 銆{銆 銆JavaCompiler piler = ToolProvider getSystemJavaCompiler();銆 銆// 寤虹珛DiagnosticCollector瀵硅薄銆 銆DiagnosticCollector diagnostics = new DiagnosticCollector();銆 銆StandardJavaFileManager fileManager = piler getStandardFileManager(diagnostics null null);銆 銆// 寤虹珛鐢ㄤ簬淇濆瓨琚緙栬瘧鏂囦歡鍚嶇殑瀵硅薄銆 銆// 姣忎釜鏂囦歡琚淇濆瓨鍦ㄤ竴涓浠嶫avaFileObject緇ф壙鐨勭被涓銆 銆Iterable pilationUnits = fileManager銆 銆 getJavaFileObjectsFromStrings(Arrays asList( test java ));銆 銆JavaCompiler CompilationTask task = piler getTask(null fileManager 銆 銆diagnostics null null pilationUnits);銆 銆// 緙栬瘧婧愮▼搴忋 銆boolean success = task call();銆 銆fileManager close();銆 銆System out println((success)? 緙栬瘧鎴愬姛 : 緙栬瘧澶辮觸 );銆 銆}銆銆 public static void main(String args[]) throws Exception銆 銆{銆 銆pilejava();銆銆 }銆銆}
銆銆濡傛灉鎯沖緱鍒板叿浣撶殑緙栬瘧閿欒 鍙浠ュ笵iagnostics榪涜屾壂鎻 浠g爜濡備笅
銆銆for (Diagnostic diagnostic : diagnostics getDiagnostics())銆銆System out printf(銆銆 Code: %s%n +銆銆 Kind: %s%n +銆銆 Position: %s%n +銆銆 Start Position: %s%n +銆銆 End Position: %s%n +銆銆 Source: %s%n +銆銆 Message: %s%n 銆銆diagnostic getCode() diagnostic getKind() 銆銆diagnostic getPosition() diagnostic getStartPosition() 銆銆diagnostic getEndPosition() diagnostic getSource() 銆銆diagnostic getMessage(null));銆銆琚緙栬瘧鐨則est java浠g爜濡備笅 銆銆public class test銆銆{銆銆 public static void main(String[] args) throws Exception銆 銆{銆 銆aa; //閿欒璇鍙ャ 銆System out println( JavaCompiler嫻嬭瘯鎴愬姛錛 );銆 銆}銆銆}
銆銆鍦ㄨ繖孌典唬鐮佷腑澶氬啓浜嗕釜aa 寰楀埌鐨勭紪璇戦敊璇涓
銆銆Code: piler err not stmt銆銆Kind: ERROR銆銆Position: 銆銆Start Position: 銆銆End Position: 銆銆Source: test java銆銆Message: test java: : 涓嶆槸璇鍙ャ銆Success: false
銆銆閫氳繃JavaCompiler榪涜岀紪璇戦兘鏄鍦ㄥ綋鍓嶇洰褰曚笅鐢熸垚 class鏂囦歡 鑰屼嬌鐢ㄧ紪璇戦夐」鍙浠ユ敼鍙樿繖涓榛樿ょ洰褰 緙栬瘧閫夐」鏄涓涓鍏冪礌涓篠tring綾誨瀷鐨処terable闆嗗悎 濡傛垜浠鍙浠ヤ嬌鐢ㄥ備笅浠g爜鍦―鐩樻牴鐩褰曚笅鐢熸垚 class鏂囦歡
銆銆Iterable options = Arrays asList( d d:\ );銆銆JavaCompiler CompilationTask task = piler getTask(null fileManager 銆銆diagnostics options null pilationUnits);
銆銆鍦ㄤ笂闈㈢殑渚嬪瓙涓璷ptions澶勭殑鍙傛暟涓簄ull 鑰岃佷紶閫掔紪璇戝櫒鐨勫弬鏁 灝遍渶瑕佸皢options浼犲叆
銆銆鏈夋椂鎴戜滑緙栬瘧涓涓狫ava婧愮▼搴忔枃浠 鑰岃繖涓婧愮▼搴忔枃浠墮渶瑕佸彟鍑犱釜Java鏂囦歡 鑰岃繖浜汮ava鏂囦歡鍙堝湪鍙﹀栦竴涓鐩褰 閭d箞榪欏氨闇瑕佷負緙栬瘧鍣ㄦ寚瀹氳繖浜涙枃浠舵墍鍦ㄧ殑鐩褰
銆銆Iterable options = Arrays asList( sourcepath d:\src );
銆銆涓婇潰鐨勪唬鐮佹寚瀹氱殑琚緙栬瘧Java鏂囦歡鎵渚濊禆鐨勬簮鏂囦歡鎵鍦ㄧ殑鐩褰
lishixin/Article/program/Java/hx/201311/27239
『叄』 java中的api是什麼意思
Java中的API是應用程序編程介面的縮寫。以下是關於Java中API的詳細解釋:
定義與功能:API是為了幫助程序員編寫軟體而設計的一組定義,包括介面、類和方法等。它向開發者提供了使用操作系統、軟體庫和其他服務的標准方式。
主要類型:
- 核心API:Java編程中最基本的API,提供了編寫所有類型的Java應用程序所需的類和方法,還包括Java適用於開發Web應用程序的標准API。
- 可擴展性API:用於Java應用程序架構的擴展,如JavaEE API和JavaFX API。
優勢:
- 靈活性與可定製化:Java API提供了許多靈活和可定製化的組件,以滿足各種需求。
- 模塊化:API的模塊化使編程更加容易,開發者不需要從頭開始構建應用程序。
- 安全性與標准化:API具有健全的安全模型和標准化的開發過程,有助於保障代碼質量和穩定性。
- 社區支持:Java API的龐大社區支持使得開發人員可以更快地獲得學習材料和專業人士的指導。
綜上所述,Java中的API是開發Java應用程序的重要工具和資源,它提供了豐富的類和方法,使開發者能夠高效地構建和擴展應用程序。