本文内容是BeanShell入门教程的中文化主要包含了以下内容

1.快速入门

2.基本语法

3.脚本方法

4.脚本对象

5.范围值

快速入门

1.下载和运行BeanShell

我们可以在http://www.beanshell.org上下载到BeanShell的最新版本,而且可以在图形化桌面模式或者命令行模式下运行。

如果你只是想下载下来玩玩看,那么双击JAR文件,运行桌面版的就可以了。但是,或许你更想以后长期使用它,那么你应该把这个JAR文件加入到你的classpath中,以便更好的和你的类和应用一起工作。

你当然也可以添加BeanShell到你的Java扩展文件夹下,并且把它添加到你的classpeth中。(注意:如果你把BeanShell放在了扩展文件夹下,而且想和例如Jakarta Ant这样的BSF应用一起使用,你必须安装bsf.jar到相同位置)。

To install as an extension place the bsh.jar file in your

$JAVA_HOME/jre/lib/ext folder. (OSX users: place the bsh.jar in

/Library/Java/Extensions or ~/Library/Java/Extensions for individual users.)

Or add BeanShell to your classpath like this:

unix: export CLASSPATH=$CLASSPATH:bsh-xx.jar

windows: set classpath %classpath%;bsh-xx.jar

标注:你可以使用BeanShell中的addClassPath()和setClassPath()命令来修改classpath。

你当然也可以在GUI或者命令行模式下运行BeanShell。

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

当然BeanShell在你的Java应用中也是可以被调用的。例如:作为远程服务模式用来调试,作为一个servlet或者applet。更加详尽的内容可以参考“BeanShell的操作模式”一节。

2.BeanShell的GUI

BeanShell GUI是用来方便显示BeanShell的功能的。并不是打算替代某个IDE。包含BeanShell脚本功能的一款全功能的开发环境是jEdit编辑器。

如果使用BeanShell的GUI模式,将会打开一个控制台窗口。使用右键可以打开一个附加的控制台窗口和其他的工具例如简单的类浏览器。

每个控制台窗口运行一个独立的BeanShell解释器实例。图形化控制台支持基本的命令历史,行编辑,剪切和粘贴,还有类和变量名补全。在控制台上,你可以打开一个简单的编辑器窗口,在哪里你可以写脚本,并且使用eval选项来对附加控制台的工作空间或者新的工作空间中的文本进行求值运算。

3.Java语句和表达式

BeaShell理解标准的Java语句,表达式和方法声明。语句和表达式是Java方法中最基本的东西,例如:变量的声明和赋值,方法调用,循环,条件语句。

你可以像在Java中一样用他们,当然,在BeanShell中,你有更多的机会使用"loosely typed(松类型)"变量。也就是说,你可以省略掉变量类型,包括元类型和对象类型。如果你滥用了变量类型,那么BeanShell会抛出一个异常。

下面是一些例子:

foo = "Foo";

four = (2 + 2)*2/2;

print( foo + " = " + four ); //print() is a BeanShell command//Do a loopfor (i=0; i<5; i++)

print(i);

//Pop up a frame with a button in itbutton = new JButton( "My Button" );

frame = new JFrame( "My Frame" );

frame.getContentPane().add( button, "Center" );

frame.pack();

frame.setVisible(true);

4.有用的BeanShell命令

在前面的例子中我们使用了便捷的内建BeanShell命令print()来显示值。print()做的事情和System.out.println()差不多,它确保输出内容到命令行中。print()显示一些类型的对象时比Java要啰嗦,例如数组类型。另外一个相关的命令是show(),自动显示你打入的每一行。

还有一些其他常用的BeanShell命令如下:

source(),run():读一个bsh脚本到当前解释器(interpreter)中,或者在新的解释器中运行这个脚本

frame():使用Frame或者JFrame显示一个GUI组件(component)

load(),save():从文件中加载一个序列化对象(serializable object),或者把它保存到文件中

cd(),cat(),dir(),pwd(),etc:类似于Unix中的命令

exec():运行一个本地应用(native application)

javap():打印一个对象的方法和域,类似于Java中的javap命令的输出

setAccessibility():使得私有的(private)和受保护的(protected)组件可被自由访问(unrestricted access)

标注:BeanShell命令并不是真正的内建的(built-in),而是从classpath自动加载的简单的BeanShell脚本,你可以向classpath中添加自己的脚本来扩展基本的命令集。

5.脚本方法

你可以声明和使用方法就像在Java的class中一样。

int addTwoNumbers( int a, int b ) {

return a + b;

}

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

Bsh方法也允许动态的(松类型的)参数和返回类型。

add( a, b ) {

return a + b;

}

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

6.接口实现

注意:BeanShell中实现任何接口,都需要Java1.3或者更高版本。

你可以使用标准的Java匿名内部类语法来实现一个接口类型,如下所示:

ActionListener scriptedListener = new ActionListener() {

actionPerformed( event ) { ... }

}

你当然也没有必要脚本化接口的所有方法。你可以选择脚本化那些你可能要调用的方法。若果你尝试调用一个没有被定义的方法,那么代码会抛出异常。如果你希望重载大量方法的行为-例如为logging产生一个伪适配器-你可以实现一个特殊的方法签名:invoke(name, args),这个方法用来处理未定义的方法被调用的情况。

ml = new MouseListener() {

mousePressed( event ) { ... }

//handle the rest invoke( name, args ) { print("Method: "+name+" invoked!");

}

7.脚本对象

在BeanShell中,就像在JavaScript和Perl中,方法“闭包”允许你创建脚本对象。你可以让一个方法返回特殊值this从而让这个方法调用的返回值成为一个对象引用。在方法调用过程中,你可以使用这个引用指向任意的变量集。有用的对象当然包括了方法,所以在BeanShell脚本方法中可以在任意水平包含方法。如下所示:

foo() {

print("foo");

x=5;

bar() {

print("bar");

}

return this;

}

myfoo = foo(); //prints "foo"print( myfoo.x ); //prints "5"myfoo.bar(); //prints "bar"

如果相关“闭包”的东西看起来很陌生,不要担心。他只是对象语言进化过程中的必然步骤。你可以在以后看到更多解释。

在你的脚本中,Beanshell脚本对象(例如:像前面例子的myFoo一样的任何‘this’类型的引用)可以自动地实现任意Java接口类型。当Java代码调用接口中的函数时,相应的脚本函数将被调用来处理它们。BeanShell将会自动地转化你的脚本对象,当你试图把它传给一个使用了接口类型的参数的方法时。传递BeanShell之外的脚本引用时,你可以使用强制转换。后面会详细讲解。

8.在你的应用中调用BeanShell

你在你的应用中可以创建BeanShell解释器实例并且使用eval()或者source()命令来获取文本或者执行脚本。你或许想往脚本中传递值,那么可以使用后set(),或者从中获得结果值,那么可以使用get().

import bsh.Interpreter;

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

Date date = (Date)i.get("date"); //retrieve a variable//Eval a statement and get the resulti.eval("bar = foo*10");

System.out.println( i.get("bar") );

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

java beanshell_Java脚本-BeanShell相关推荐

  1. Groovy – Java的脚本语言

    Groovy – Java的脚本语言 by Mark Volkmann, Partner Object Computing, Inc. (OCI) 翻译:raxy 介绍 Groovy是用Java实现的 ...

  2. 让电脑死机的java代码_小编为你win7系统Java活动脚本出错导致电脑死机的还原方法...

    随着电脑的使用率越来越高,我们有时候可能会遇到win7系统Java活动脚本出错导致电脑死机问题,如果我们遇到了win7系统Java活动脚本出错导致电脑死机的问题,要怎么处理win7系统Java活动脚本 ...

  3. java平台脚本+java编译器API

    [0]README 0.1)本文文字描述转自 core java volume 2, 旨在学习  java平台脚本+java编译器API 的 基础知识: ----------------------- ...

  4. linux自动安装Java环境脚本,Linux 自动添加JAVA环境脚本

    Linux 自动添加JAVA环境脚本 1. 删除原有的JAVA环境变量配置 ###  --------------delete old config --------------------  ### ...

  5. bat java 启动脚本_bat批处理启动java程序通用脚本

    前提: 脚本假设需要给脚本传递两个参数,参数最终传给java程序 脚本同级目录中classes内存放的是程序运行的classes文件 脚本同级目录中lib内存放的是程序运行的jar包 非最佳脚本,根据 ...

  6. java appium_Android应用开发之AS+Appium+Java+Win自动化测试之Appium的Java测试脚本封装(Android测试)...

    本文将带你了解Android应用开发AS+Appium+Java+Win自动化测试之Appium的Java测试脚本封装(Android测试),希望本文对大家学Android有所帮助. 一.为什么需要封 ...

  7. JAVA性能测试脚本分析

    众所周知, java 语言是一门非常适合网络开发的语言,用Java语言进行性能测试脚本开发将会大大提高测试开发效率.LoadRunner中提供了对Java虚拟用户的支持.Java虚拟用户依托于JDK, ...

  8. Java执行脚本命令

    //初始化脚本命令 String commond = ""; Process process = null; //脚本执行返回值 boolean flag = false; try ...

  9. java让电脑死机怎么办,win7系统Java活动脚本出错导致电脑死机的解决方法

    win7系统使用久了,好多网友反馈说win7系统Java活动脚本出错导致电脑死机的问题,非常不方便.有什么办法可以永久解决win7系统Java活动脚本出错导致电脑死机的问题,面对win7系统Java活 ...

  10. java让电脑死机怎么办,技术编辑教你解决win7系统Java活动脚本出错导致电脑死机的解决步骤...

    很多用户都遇到过win7系统Java活动脚本出错导致电脑死机的问题吧,根据小编的了解并不是每个人都会处理win7系统Java活动脚本出错导致电脑死机的问题,因此我就给大家整理总结了win7系统Java ...

最新文章

  1. 网闸与防火墙的区别_网关和网闸、防火墙的区别?
  2. python3 requirements使用方法 ~= >= <
  3. 关于Java你不知道的那些事之Java注解和反射
  4. UIView CALayer
  5. 【客户下单】自动分单逻辑
  6. 判定两个tensor维度相同_Tensorflow源码解析5 -- 图的边 - Tensor
  7. 下拉框输入模糊查询_RazorSQL for Mac(数据库工具查询)
  8. Linux怎么把目录设置群组,linux设置目录和文件使用权限
  9. C++中的深拷贝和浅拷贝(详解)
  10. 泡面比泡MM好的16个理由
  11. PyTorch系列入门到精通——模型创建与nn.Module
  12. linux 无法启动matlab,在具有 jre 1.7.0 _05的科学linux上,无法启动 MATLAB gui ( 指南)_matlab_开发99编程知识库...
  13. QT表格的宽度自适应调整方法void setStretchLastSection ( bool stretch ) 转帖
  14. 《计算机操作系统》第四版(汤小丹考研版) 全书知识梳理
  15. 在html中加入中文字体,html中中文字体的代码
  16. RISC-V嵌入式开发入门篇1:RISC-V GCC工具链的介绍
  17. android 视频连续播放,VideoView实现视频无缝连续播放
  18. uniapp使用plus.sqlite实现图片、视频缓存到手机本地
  19. 原生js实现 转义还原HTML
  20. 使用java、html5以及wPaint实现在线编辑图片并保存到FTP中的功能,在线图片为iis服务

热门文章

  1. 知识产权(笔记 1-3章)
  2. 动软代码生成器-模板修改,模型修改
  3. 前端接收pdf文件_前端利用pdfobject.js处理pdf文件
  4. Web前端开发规范手册 1
  5. 19年电赛B题巡线机器人走过的坑
  6. RTthread IO设备的创建
  7. 使用ACR122U NFC读卡器对M1卡进行读写操作(可以读写中文)
  8. html5 中英文语言切换,使用 vue-i18n 切换中英文效果
  9. 【DL】第3章 使用词嵌入计算文本相似度
  10. 乡村振兴专题:农村面板数据3.0