BeanShell变量的基本范围

注意:自 BeanShell 的 1.3 版本以后“松散”类型变量的默认范围发生了变化,与 Java 的更加一致。BeanShell 仍然支持兼容以前版本的类型范围。通过设置系统属性“本地化范围”为“true”,这种模式可以启用旧版本中的代码。可参见之后会讲到的“本地化范围”。

BeanShell 中的变量范围尽可能会像 Java 表现的那样。然而,普通的 Java 并不支持“松散”类型的变量(即变量可以不用先声明就能使用)。所以我们就必须在 BeanShell 中定义这样的行为。我们会在下一部分关于未指定类型的变量中看到——变量没有声明并且也没有在其他地方为变量指定一个值——默认为“本地化”范围。这意味 着在一般情况下,如果你没有先声明变量就为变量指定一个值,你在当前的范围中就创建了一个本地变量。

代码块

代码块就是代码包含在“{}”大括号中间的代码。在 BeanShell 中,和 Java 一样,代码块为指定类型的变量定义了范围的级别:在一个块中声明的类型变量就属于当前这块范围内。按惯例,在这块范围中哪里出现其他变量的分配,哪里就定义了变量。
然 而,在 BeanShell 中没有指定类型的变量就不受代码块的约束。反而他们会在该范围级别的外面(也是封闭的范围)进行声明。这一点,BeanShell 代码看起来正好类似 Java 代码。在 BeanShell 中如果你在代码块中声明了一个带类型的变量,那么它就在本块中起作用。但是如果你使用了一个不带类型的变量(看起来正好像在 Java 中一个普通的变量分配),那么它就表现为在一个封闭范围中的变量分配。

下面举几个有意义的例子:

 
 
  1. // 任意的代码块 
  2. y = 2; // 不带类型的变量的赋值 
  3. int x = 1; // 带类型的变量的赋值 
  4. print( y ); // 2 
  5. print( x ); // 错误! x 未定义。 

 
 
  1. // 同样出现在声明的代码块中: if, while, try/catch, 等 
  2. if ( true ) { 
  3. y = 2; // Untyped variable assigned 
  4. int x = 1; // Typed variable assigned 
  5. print( y ); // 2 
  6. print( x ); // Error! x 未定义 



在 for 循环的初始化区域声明的变量沿用了代码块同样规则:

 
 
  1. forint i=0; i<10; i++ ) { // 带类型的 for 初始化变量 
  2. j=42; 
  3. print( i ); // 错误! 'i' 未定义 
  4. print( j ); // 42 

 
 
  1. for( z=0; z<10; z++ ) { } // 不带类型的 for 初始化变量 
  2. print( z ); // 10 



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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值