java命令直譯器介紹-bsh
今天在專案裡面看到了前人用到了一個很有用的工具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還是挺強大的,若要詳細瞭解,還是到上面說的官網裡面看吧,很詳細的。
相關文章
- Python直譯器種類以及特點?詳細介紹!Python
- NEO Python編譯器介紹Python編譯
- Java命令學習系列(零)——常見命令及Java Dump介紹Java
- 用java寫一個lisp 直譯器JavaLisp
- Ipython 直譯器Python
- installer 命令介紹
- Prepack 介紹(譯)
- Java經典垃圾回收器介紹Java
- 虛擬機器之linux介紹和命令虛擬機Linux
- Numba編譯器的介紹與應用編譯
- 20.java設計模式之直譯器模式Java設計模式
- 折騰Java設計模式之直譯器模式Java設計模式
- python直譯器在哪Python
- 直譯器模式(Interpreter)模式
- Linux xargs命令介紹Linux
- Linux useradd 命令介紹Linux
- Shell echo命令介紹
- [譯] React Profiler 介紹React
- Java介紹Java
- 精讀《手寫 SQL 編譯器 - 文法介紹》SQL編譯
- 精讀《手寫 SQL 編譯器 – 文法介紹》SQL編譯
- 淺談彙編器、編譯器和直譯器編譯
- Python3 直譯器Python
- VScode和python直譯器VSCodePython
- 24_直譯器模式模式
- Python直譯器和IPythonPython
- Linux重啟命令介紹Linux
- SVN命令列使用介紹命令列
- 簡單介紹 ldd 命令
- 「譯」MotionLayout介紹 (part III)
- 「譯」MotionLayout 介紹 (part II)
- Vue webpack 介紹 翻譯VueWeb
- Golang實現JAVA虛擬機器-指令集和直譯器GolangJava虛擬機
- SVG繪製直線簡單介紹SVG
- 用java寫lisp 直譯器 (10 實現物件和類)JavaLisp物件
- 在C,C++,java和python執行時直譯器和編譯器的區別C++JavaPython編譯
- 源語言、目標語言、翻譯器、編譯器、直譯器編譯
- Java虛擬機器(JVM)和Python直譯器有什麼區別?Java虛擬機JVMPython
- 設計模式(十五)直譯器設計模式