深入BeanShell脚本对象

更多详情请见此处

使用 BeanShell 的许多朋友使用它来编写与已经存在的 Java 类或者 API 作业的脚本,或者为了他们自己的应用在运行时在没有其他编译器的帮助下执行其他种类动态的活动。通常这意味着编写相对非结构化的代码——比如,包含在一个 单独的脚本文件或者 eval() 语句里的一系列方法调用或者循环。在之前的章节中我们看到 BeanShell 也具有脚本方法的能力,就像 Java 一样。创建方法以及新的 BeanShell 命令(仅仅是他们自己文件中的方法)是组织你的脚本成为可重用、可维护组件的自然进程。

方 法和结构化的程序设计当然在于对象以及面向对象编程完整的程度。在 Java 中对象是类的产物。虽然 BeanShell 和标准的 Java 语法是兼容的,包括语句、表达式以及方法,但你仍然不能在 BeanShell 中编写新的 Java 类的脚本。但是,BeanShell 允许你编写像“闭合方法”的脚本对象,类似在 Perl 5.x、JavaScript 还有其他对象——可以写脚本的语言中的做法。这类脚本对象(我们马上就会描述)的风格简单而且从脚本方法的风格自然流传下来。你马上会看到这种语法,是标 准 Java 使用“this”引用指向一个对象的概念的直接扩展。

 
 
  1. 注意: 
  2. 在标准 Java 中,一个方法在一个对象(一个实例化的方法)里可以使用专门的变量“this”指向这个封闭 
  3. 的对象。 
  4.  
  5. // MyClass.java 
  6. MyClass { 
  7. Object getObject() { 
  8. return this; // 返回对象的一个引用 
  9.  
  10. 在上面的例子里,MyClass 的 getObject() 方法返回自己对象实例(MyClass 对象的实例)的一个引用。 

“this”引用
跟多数的语言一样,BeanShell 里的一个执行的方法有它自己持有参数(传值参数)变量和本地声明变量的“本地化”范围。在下面的代码段中,在 foo() 方法中我们会使用到的任何变量通常只在 foo() 当中以及一个特定的 foo() 方法调用的生存期内可见。
示例代码

 
 
  1. // 定义 foo() 方法: 
  2. foo() { 
  3. int bar = 42; 
  4. print( bar ); 
  5. // 调用 foo() 方法: 
  6. foo(); // 打印 42 
  7. print( bar ); // Error, bar 在此未定义 

运行效果

在上面的例子中,变量"bar"属于方法foo(),因此在方法调用的外面是不可用的——方法退出时变量就会被处理掉,如标准的 Java 本地变量一样。

现在转换一个视角——在 BeanShell 里你可以选择通过专门的“this”引用在一个方法调用退出之后对该作用域“抓住不放”。就像在 Java 中一样,“this”指向当前对象的上下文。唯一不同过的地方就是在这种情况下该上下文只与该方法有关联,却不是一个类的实例。

在方法返回之后保存“this”引用,使用标准 Java 记号“.”你可以继续指向在该方法中定义的变量:

 
 
  1. foo() { 
  2. int bar = 42; 
  3. return this; 
  4. fooObject = foo(); 
  5. print( fooObject.bar ); // 打印 42! 

运行效果

在上面的例子中,foo() 方法返回值(“this”引用)可以看做是一个“foo”对象的实例。每一次 foo() 方法调用会创建一个新的对象;foo() 此时不仅仅是一个方法,还是对象构造的一种形式。

上面案例中的 foo 对象甚至可以说不是一个对象,说是一个构造器更合适。它包含变量(bar)但没有“行为”。
下一个视角,我们会介绍 BeanShell 方法也允许包含其他方法:

 
 
  1. foo() { 
  2.     bar() { 
  3.       ... 
  4.     } 

脚本方法可以通过这种方式定义任意数量的嵌套方法,可以是任意深度的。这些方法是方法的“本地”调用。

BeanShell 方法闭合范围内的语句和表达式可以叫做“本地”方法,就像任何其他方法一样。(局部地定义的方法覆盖外部的——在 Java 里多数方法像本地变量那样隐藏了实例变量。)闭合的方法并不直接在闭合方法外部可见。然而,正如你希望的那样,你可以像对 Java 对象那样通过一个适当的对象引用来调用它们:

 
 
  1. foo() { 
  2. int a = 42; 
  3. bar() { 
  4. print("The bar is open!"); 
  5. bar(); 
  6. return this; 
  7. // 构造 foo 对象 
  8. fooObject = foo(); // 打印 "the bar is open!" 
  9. // 打印 foo 对象的一个变量 
  10. print ( fooObject.a ); // 42 
  11. // 使用 foo 对象调用一个方法 
  12. fooObject.bar(); // 打印 "the bar is open!" 

运行效果


在方法里的方法声明在块状的结构中,表现得就像它们直接被声明在该方法里一样。换言之,没有本地块方法。
示例代码

 
 
  1. foo() { 
  2.     bar() { } 
  3.       if ( true ) { 
  4.         bar2() { } 
  5.     } 
  6.     return this; 

在上面的例子中,方法 bar() 和 bar2() 都被定义在 foo() 里面。

下一章节我们回到变量作用域的话题中来,并更加深入地探讨如何使用脚本方法和对象。



本文转自 tongqiuyan  51CTO博客,原文链接:http://blog.51cto.com/tongqiuyan/757750


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: BeanShell是一种小型编程语言,也是一种Java脚本语言,可用于快速应用程序开发。它在Java编程领域非常流行,因为它允许以非常简单的方式将Java代码直接插入到脚本中。 如果您想学习BeanShell编程,并且想了解BeanShell的各种细节和语法,那么BeanShell中文手册是一个非常好的选择。BeanShell中文手册是一个非常详尽的文档,提供了BeanShell的完整语法和各种例子。 手册的第一章介绍了BeanShell以及它的主要功能和用途,第二章介绍了BeanShell的基本语法,包括变量、运算符、条件语句和循环语句。第三章介绍了BeanShell的函数和方法,包括如何定义和调用函数方法。第四章介绍了BeanShell脚本的输入和输出。第五章介绍了BeanShell的类和对象,包括如何定义和实例化类和对象。 此外,手册还提供了许多开发工具,如JEdit和Eclipse,以帮助您更好地使用BeanShell编程语言。 总的来说,如果您想要使用BeanShell进行Java应用程序的快速开发,那么BeanShell中文手册是一个必要的工具,它提供了全面的、易于理解的教程和例子。 ### 回答2: BeanShell是一种由Java编写的轻量级编程语言,它提供了Java语言的许多特性和语法,可以轻松地与现有Java代码集成。BeanShell中文手册是BeanShell语言的中文技术文档,包含BeanShell语言的语法、关键字、类库和使用说明。 在BeanShell中文手册中,首先介绍了BeanShell语言的概述,包括BeanShell的定义、特性、应用场景和历史。接着详细介绍了BeanShell语言的语法和关键字,包括变量、运算符、控制语句、函数、类、对象、注释等,使读者能够快速掌握BeanShell语言的基础知识。 除此之外,BeanShell中文手册还提供了丰富的API文档和使用示例,包含常用的类库和方法,以及处理文件、网络、XML等常见任务的实现方法,使读者能够深入了解BeanShell语言的应用。 总的来说,BeanShell中文手册是BeanShell语言的必备参考资料,对于想要学习和应用BeanShell语言的开发人员和研究人员来说,具有非常重要的意义。 ### 回答3: BeanShell 是一种脚本语言,它是 Java 平台上的一种轻量级语言。它被设计成可以在 Java 应用程序内部使用,提供了一种简单、直接的方法来与 Java 代码交互,并执行计算、操作以及其他一些常见的任务。 Beanshell 中文手册涵盖了 BeanShell 的所有基础知识,包括语法、数据类型、操作符、流控制语句等等。手册中还介绍了 BeanShell 操作 Java 中的类、方法和变量。 手册还介绍了 BeanShell 在应用程序中的常见用途,包括脚本式编程、Java 应用程序测试、动态代码生成等等。手册还详细介绍了 BeanShell 的常见应用场景和示例,以及 BeanShell 和其他 Java 编程语言的比较。 除了基础知识,手册还提供了 BeanShell 内置对象、API 和扩展的详细说明。用户可以利用这些特性增强 BeanShell 能力,实现更强大的功能。 最后,手册还提供了 BeanShell 的高级特性,如集成并行计算、使用反射编程等等。这些高级特性使得 BeanShell 成为一种强大且灵活的脚本语言,适用于各种复杂的应用场景。 总之,Beanshell 中文手册是一本非常实用的教材,它可以帮助你了解 BeanShell 的基础知识,掌握它的高级特性,让你能够更加有效地使用 BeanShell,提高 Java 应用程序的开发效率。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值