beanshell与java不同语法-1

1.实现接口
需要在java1.3或以上环境中。
可以使用缺省的java匿名类的语法实现一个接口类,例如:
ActionListener scriptedListener = new ActionListener() { 
actionPerformed( event ) { ... }
}

不需要实现接口的所有的方法,只需要实现你调用的方法即可,如果调用你没有实现的方法,beanshell将抛出一个错误, [color=red]可以使用一个“赝品”来重载所有不需要的方法,这个特别方法签名是invoke(name, args),例如作为日志,当任何未定义的方法被调用时,invoke()方法会被调用输出log:[/color]
ml = new MouseListener() { 
mousePressed( event ) { ... }
// handle the rest
invoke( name, args ) { print("Method: "+name+" invoked!");
}


2.变量修饰符
只有'final' 是被实现的,其他(private / protected / public, final, ransient, volatile, static.)是被忽略的。
修饰符不能修饰未声明的变量。
所以:

button = new java.awt.Button();
button.label = "my button"; // Equivalent to: b.setLabel("my button");
print( button.label ); // Equivalent to print( b.getLabel() );

也可以使用{}访问field:

b = new java.awt.Button();
b{"label"} = "my button"; // Equivalent to: b.setLabel("my button");
h = new Hashtable();
h{"foo"} = "bar"; // Equivalent to: h.put("foo", "bar");

3.switch
switch的条件可以是Object类型的,使用equals()方法判断。
4.import类和包
可以在任何位置使用import语句,
beanshell在使用import *;导入所有类之前会标注你的完整的classpth,但是导入所有的类在你的classpath下可能非常耗时,并且也有可能造成很多的冲突,这种情况下,beashell会提示出错,并给出classpath下有冲突的类。当出现冲突时,后面的覆盖前面的,java.awt.List和java.util.List都是被默认导入的,但util是在awt之后导入的,所以在使用java.awt.List时需要重新导入,或使用全路径名。
也可以使用这种方式:

bsh % which( java.lang.String );
Jar: file:/usr/java/j2sdk1.4.0/jre/lib/rt.jar

还可以在运行状态通过setClassPath()来修改classpath,addClassPath()命令增加classpath

你可能感兴趣的:(beanshell)