怎么用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应用程序的重要工具和资源,它提供了丰富的类和方法,使开发者能够高效地构建和扩展应用程序。