在路上

          路上有驚慌,路上有理想

            BlogJava :: 首頁 :: 聯系 :: 聚合  :: 管理
            28 Posts :: 1 Stories :: 10 Comments :: 0 Trackbacks

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

          其實java也可以做到。

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

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

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

          3將Temp.class載入到jvm

          4生成object實例,利用反射執行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 阮步兵 閱讀(415) 評論(0)  編輯  收藏 所屬分類: Java
          主站蜘蛛池模板: 中阳县| 抚顺市| 谢通门县| 玛纳斯县| 尖扎县| 闽清县| 龙州县| 乌兰县| 海城市| 凌海市| 盘锦市| 五原县| 镶黄旗| 五寨县| 潼关县| 玛纳斯县| 达州市| 高州市| 政和县| 阳曲县| 改则县| 吉安市| 阿拉善盟| 陕西省| 石屏县| 土默特左旗| 古交市| 潜江市| 静海县| 东平县| 吴旗县| 西丰县| 东乡县| 綦江县| 娱乐| 大连市| 木兰县| 准格尔旗| 星子县| 凤台县| 南汇区|