java命令直譯器介紹-bsh

chaofanwei發表於2014-04-22

       今天在專案裡面看到了前人用到了一個很有用的工具java beanshell(bsh),網上搜羅了一番,發現挺有用的,於是乎,趕緊記下來備忘。

      下載地址:http://www.beanshell.org/download.html(就是一個jar包)

       doc:http://www.beanshell.org/manual/bshmanual.html

       Beanshell是用Java寫成的,一個小型的、免費的、可以下載的、嵌入式的Java原始碼直譯器,具有物件指令碼語言特性。BeanShell執行標準Java語句和表示式,另外包括一些指令碼命令和語法。利用的原理當然是java的反射。

    Quick Start

     

    java bsh.Console       // run the graphical desktop
or
    java bsh.Interpreter   // run as text-only on the command line
or
    java bsh.Interpreter filename [ args ] // run script file

        第一種即為有介面的執行,但我在win7裡面執行不了(server03中可以)

       第二站為命令列方式執行

        第三種即直接執行一個指令碼。

        但在專案裡面用,還是先把這個jar包放在專案classpath裡面,然後再程式碼裡面用下面方式執行:

import bsh.Interpreter;

Interpreter i = new Interpreter();  // Construct an interpreter
i.set("foo", 5);                    // Set variables
i.set("date", new Date() ); 

Date date = (Date)i.get("date");    // retrieve a variable

// Eval a statement and get the result
i.eval("bar = foo*10");             
System.out.println( i.get("bar") );

// Source an external script file
i.source("somefile.bsh");


簡單例項

       其實語法和java類似,另外還支援類似於js一樣的若變數型別,具體看例項:

例一:

foo = "Foo";    
four = (2 + 2)*2/2;
print( foo + " = " + four );  // print() is a BeanShell command

// Do a loop
for (i=0; i<5; i++)
    print(i);   

// Pop up a frame with a button in it
button = new JButton( "My Button" );
frame = new JFrame( "My Frame" );
frame.getContentPane().add( button, "Center" );
frame.pack();
frame.setVisible(true);

例二:

int addTwoNumbers( int a, int b ) {
    return a + b;
}

sum = addTwoNumbers( 5, 7 );  // 12

例三:

add( a, b ) {
    return a + b;
}

foo = add(1, 2);            // 3
foo = add("Oh", " baby");   // "Oh baby"

內建有用的命令

  • source(), run() - Read a bsh script into this interpreter, or run it in a new interpreter
  • frame() - Display a GUI component in a Frame or JFrame.
  • load(), save() - Load or save serializable objects to a file.
  • cd(), cat(), dir(), pwd(), etc. - Unix-like shell commands
  • exec() - Run a native application
  • javap() - Print the methods and fields of an object, similar to the output of the Java javap command.
  • setAccessibility() - Turn on unrestricted access to private and protected components.

類的匯入

       和java類似

which命令會列出指定類在哪個jar包中,很有用啊:

bsh % which( java.lang.String );
Jar: file:/usr/java/j2sdk1.4.0/jre/lib/rt.jar

 

   預設已經匯入下列包:

  • javax.swing.event
  • javax.swing
  • java.awt.event
  • java.awt
  • java.net
  • java.util
  • java.io
  • java.lang
    • bsh.EvalError
    • bsh.Interpreter

importCommands("/bsh/commands");

通過上面方式可以匯入自己寫的指令碼,在別的指令碼里面可以直接呼叫呦。

The following commands manipulate or access the classpath:

addClassPath(), setClassPath(), getClassPath() Modify the BeanShell classpath.
reloadClasses() Reload a class or group of classes.
getClass() Load a class explicitly taking into account the BeanShell classpath.
getResource() Get a resource from the classpath.

 

     總之,bsh還是挺強大的,若要詳細瞭解,還是到上面說的官網裡面看吧,很詳細的。

 

 

 

 

相關文章