在路上

          路上有驚慌,路上有理想

            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 阮步兵 閱讀(409) 評論(0)  編輯  收藏 所屬分類: Java
          主站蜘蛛池模板: 罗平县| 弋阳县| 昌图县| 饶河县| 仪陇县| 台州市| 微博| 韶山市| 呼伦贝尔市| 乐昌市| 宝坻区| 繁昌县| 广昌县| 余庆县| 永丰县| 隆昌县| 大余县| 文安县| 遂溪县| 顺昌县| 甘南县| 玛纳斯县| 雅江县| 佛山市| 循化| 大竹县| 吉隆县| 郎溪县| 油尖旺区| 浦城县| 社旗县| 龙川县| 陇南市| 得荣县| 武功县| 米易县| 凯里市| 大悟县| 浙江省| 常宁市| 苏尼特右旗|