beanshell脚本语法_shell脚本实战pdf免费

beanshell脚本语法_shell脚本实战pdf免费本文内容是BeanShell入门教程的中文化主要包含了以下内容1.快速入门2.基本语法3.脚本方法4.脚本对象5.范围值快速入门1.下载和运行BeanShell我们可以在http://www.beanshell.org上下载到BeanShell的最新版本,而且可以在图形化桌面模式或者命令行模式下运行。如果你只是想下载下来玩玩看,那么双击JAR文件,运行桌面版的就可以了。但是,或许你更想以后长期使用…

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全家桶1年46,售后保障稳定

本文内容是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”);

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/230750.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • 对于正则化的理解

    对于正则化的理解

    2021年11月19日
  • 超级搜索(Super search)

    超级搜索(Super search)现在的搜索引擎会极大的帮助用户搜索到想要的搜索的内容,我们常用的搜索引擎包括百度、搜狗、360搜索等等,今天就为大家推荐一个超级搜索的插件。超级搜索基于浏览器的全面搜索。智能识别搜索关键字,集成收藏夹(书签)搜索,历史记录搜索等功能。支持自定义扩展搜索,支持打开搜索结果列表等功能。

  • java 基础高级面试题及答案_20个高级Java开发面试题及答案,干货!!!

    java 基础高级面试题及答案_20个高级Java开发面试题及答案,干货!!!这是一个高级Java面试系列题中的第一部分。这一部分论述了可变参数,断言,垃圾回收,初始化器,令牌化,日期,日历等等Java核心问题。1.什么是可变参数?可变参数允许调用参数数量不同的方法。请看下面例子中的求和方法。此方法可以调用1个int参数,或2个int参数,或多个int参数。//int(type)followed…(threedot’s)issyntaxofavari…

  • 什么是先验概率什么是后验概率_先验概率和后验概率公式

    什么是先验概率什么是后验概率_先验概率和后验概率公式先验概率后验概率

  • Depix 这款去“马赛克“工具效果如何?

    Depix 这款去“马赛克“工具效果如何?最近突然冒出一则新闻,说出了一款开源去“马赛克“工具,三天获Github5000星,火爆网络!这款工具就是depix。出于好奇,去github下载了,文件很小,压缩包才580k,解压后也不到700k,里面的文件是python语言写的,主目录下就一个文件:depix.py,主目录下包含三个目录depixlib(库文件),docs(文档),images(需要用到的图片),如下图:根据depix在github上介绍,该文件目的根本不是去马赛克,而是做密码恢复使用,是对于手机或其他截屏上的类似马赛克

  • C语言贪吃蛇完整代码

    C语言贪吃蛇完整代码#include<stdio.h>#include<stdlib.h>#include<Windows.h>//windows编程头文件#include<time.h>#include<conio.h>//控制台输入输出头文件#ifndef__cplusplustypedefcharbool;#define…

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号