在路上

          路上有驚慌,路上有理想

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

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

          其實(shí)java也可以做到。

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

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

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

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

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

          說明,這只是個(gè)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) 評(píng)論(0)  編輯  收藏 所屬分類: Java
          主站蜘蛛池模板: 扎囊县| 和静县| 康保县| 江都市| 介休市| 云梦县| 宣汉县| 沁水县| 东台市| 穆棱市| 孝昌县| 岳西县| 富裕县| 乌拉特中旗| 乐平市| 常州市| 潜山县| 营口市| 南涧| 兴仁县| 苍南县| 阿拉尔市| 彭水| 咸宁市| 蓝田县| 监利县| 板桥市| 灵川县| 正蓝旗| 湖南省| 清水县| 宝清县| 河南省| 独山县| 富平县| 玛曲县| 青河县| 德钦县| 千阳县| 崇州市| 北流市|