在路上

          路上有驚慌,路上有理想

            BlogJava :: 首頁 :: 聯(lián)系 :: 聚合  :: 管理
            28 Posts :: 1 Stories :: 10 Comments :: 0 Trackbacks

          如果用過python,就知道它有了command line 工具,比如你輸入 print 'a' ,該工具輸出:a,好處是便于快速學(xué)習(xí)python 語法。

          其實java也可以做到。

          下面是一個java 腳本解釋器的helloword版本,思路如下:

          1動態(tài)創(chuàng)建一個Temp.java類文件,里面只有一個excute方法,把從控制臺輸入 的字符串加入到類方法中,比如for(int i=0;i<10;i++){System.out.println(i);}。

          2再利用com.sun.tools.javac.Main.compile 動態(tài)編譯Temp.java 生成class

          3將Temp.class載入到j(luò)vm

          4生成object實例,利用反射執(zhí)行excute方法

          說明,這只是個test版本。

          public class Test {
             public static void main(String[] args) throws IOException, ClassNotFoundException, InstantiationException, IllegalAccessException, IllegalArgumentException, SecurityException, InvocationTargetException, NoSuchMethodException{
                
                 
                  BufferedReader reader  = new BufferedReader(new InputStreamReader(System.in));
                  while(true){
                      String js=reader.readLine();
                     OutputStream os = new FileOutputStream("Temp.java"); 
                      String tempJava="public class Temp"+
                         " {   "+
                          " public void excute() "+
                          " {  "+
                           js+
                          " }  "+
                         " }  ";
                      os.write(tempJava.getBytes());  
                      os.close();
                      String[] compileArgs = new String[] {"Temp.java"};  
                      com.sun.tools.javac.Main.compile(compileArgs);  
                      URLClassLoader loader =  
                         new URLClassLoader(new URL[]{new File(".").toURI().toURL()}); 
                      Class<?> scriptClass = loader.loadClass("Temp");
                      Object obj = scriptClass.newInstance();
                      obj.getClass().getDeclaredMethod("excute").invoke(obj);
                      obj=null;
                  }
             }
          }

          posted on 2010-08-30 22:29 阮步兵 閱讀(409) 評論(0)  編輯  收藏 所屬分類: Java
          主站蜘蛛池模板: 库尔勒市| 新乐市| 桓台县| 贵德县| 鄂尔多斯市| 黄浦区| 志丹县| 合水县| 呼和浩特市| 磐安县| 台州市| 会同县| 华安县| 新建县| 财经| 贵定县| 宁化县| 新巴尔虎左旗| 福海县| 西华县| 象山县| 容城县| 惠东县| 嘉峪关市| 漳浦县| 大邑县| 伊金霍洛旗| 汉源县| 伊吾县| 平远县| 大厂| 宣武区| 天台县| 中方县| 饶平县| 秭归县| 湘乡市| 东至县| 永定县| 通榆县| 长子县|