<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    隨筆-31  評(píng)論-2  文章-0  trackbacks-0

    快速入門(mén)

    歡迎使用BeanShell.這是一個(gè)速成課程。我們將省去一些重要的選項(xiàng)和細(xì)節(jié)。要學(xué)習(xí)更多的內(nèi)容請(qǐng)看本User's Guide的其它部分。

    下載和運(yùn)行BeanShell

    請(qǐng)到http://www.beanshell.org下載最新的JAR文件。你可以用圖形桌面模式和命令行模式起動(dòng)BeanShell。
    如果你只是要玩一玩BeanShell,你可以在BeanShell的jar文件上雙擊來(lái)起動(dòng)BeanShell的桌面。但不管怎樣,如果你要讓BeanShell與你的類(lèi)與應(yīng)用程序一起工作就必須將BeanShell的jar文件加到classpath中。
    你可以將BeanShell的jar文件拖到JAVA_HOME的ext目錄也可以直接加到classpath中。

    • windows用戶(hù)請(qǐng)將bsh.jar放在JAVA_HOME/jre/lib/ext文件夾,OSX用戶(hù)可以放在/Library/Java/Extensions.
      或者增加BeanShell到你的classpath目錄,如:
      unix: export CLASSPATH=$CLASSPATH:bsh-xx.jar
      windows:set classpath %classpath%;bsh-xx.jar

    然后你就可以運(yùn)行BeanShell在GUI或命令行模式:

    •  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

    可以在你的應(yīng)用程序內(nèi)部來(lái)運(yùn)行,也可以作為debug及servlet的遠(yuǎn)程服務(wù)器模式,或一個(gè)Applet內(nèi)部來(lái)運(yùn)行BeanShell。請(qǐng)參考"BeanShell Modes of Operation"獲得更多詳情。

    BeanShell GUI

    用GUI模式啟動(dòng)BeanShell后,將打開(kāi)一個(gè)桌面視窗。用鼠標(biāo)右擊在桌面的背景上,你可以打開(kāi)另一個(gè)控制臺(tái)視窗及其它的工具如一個(gè)簡(jiǎn)單的類(lèi)游覽器。
    每一個(gè)控制臺(tái)視窗運(yùn)行一個(gè)獨(dú)立的BeanShell解釋器。這個(gè)圖形化的控制臺(tái)支持基本的歷史命令,行編輯,剪切和粘貼,甚至類(lèi)和變量名的自動(dòng)完成功能。從控制臺(tái)你能開(kāi)啟一個(gè)簡(jiǎn)單的編輯視窗。在它里面,你可以編寫(xiě)腳本和使用‘eval’選項(xiàng)求表達(dá)式的值。

    Java語(yǔ)句和表達(dá)式

    BeanShell能理解標(biāo)準(zhǔn)的JAVA語(yǔ)句,表達(dá)式,和方法宣告。語(yǔ)句和表達(dá)式的內(nèi)容可以是:變量,宣告,賦值,方法調(diào)用,循環(huán),條件等。
    在 Java程序中你必須嚴(yán)格的使用它們,但在BeanShell中,你可以用“寬松類(lèi)型”(loosely typed)的方式來(lái)使用它們。也就是說(shuō),你可以在寫(xiě)腳本時(shí)偷懶,不進(jìn)行變量類(lèi)型的宣告(在原始數(shù)據(jù)類(lèi)型和對(duì)象都可以)。如果你試著用錯(cuò)變量類(lèi) 型,BeanShell將會(huì)給出一個(gè)錯(cuò)誤。
    這里有一些例子:

    • foo = "Foo";   
      four = (2 + 2)*2/2;
      print( foo + " = " + four );  // print() is a BeanShell command
      // Do a loop
      for (i=0; i<5; i++)
          print(i);  
      // Pop up a frame with a button in it
      button = new JButton( "My Button" );
      frame = new JFrame( "My Frame" );
      frame.getContentPane().add( button, "Center" );
      frame.pack();
      frame.setVisible(true);

    有用的BeanShell命令

    在 剛才那個(gè)例子中我們用了一個(gè)內(nèi)建在BeanShell中的一個(gè)方便的命令print(),來(lái)顯示變量的值。print()跟ava的 System.out.println()非常的相像,除非它能保證輸出總是命令行。print()也可以顯示一些對(duì)象的類(lèi)型(如數(shù)組),但比Java的 更詳細(xì)。另一個(gè)相關(guān)的命令是show(),用來(lái)開(kāi)啟與關(guān)閉顯示你輸入的每一行的結(jié)果。
    這兒是一些其它的BeanShell的命令:
    source(), run() - 將一個(gè)bsh腳本讀到解釋器或運(yùn)行在另一個(gè)解釋器。
    frame() - 顯示一個(gè)Frame或JFrame的GUI組件.
    load(), save() - 載入和保存一個(gè)序列化的對(duì)象到一個(gè)文件.
    cd(), cat(), dir(), pwd(), etc. - 類(lèi)unix的shell命令。
    exec() - 運(yùn)行一個(gè)本地的程序。
    javap() - 打印一個(gè)對(duì)象的方法和字段,類(lèi)似于Java的javap命令。
    setAccessibility() - 開(kāi)啟無(wú)限制的存取private 和protected的組件。
    要獲得更多的信息請(qǐng)查看BeanShell命令的詳細(xì)清單。

    提示:
    BeanShell命令并不是真的"內(nèi)建"其中的,而是作為腳本方法自動(dòng)從classpath載入的. 你可以擴(kuò)展基本命令集并加到classpath中作為自訂義的腳本來(lái)使用。

    腳本方法

    你可以在bsh中宣告和使用方法,就像在java的類(lèi)中一樣。

    • int addTwoNumbers( int a, int b ) {
          return a + b;
      }
      sum = addTwoNumbers( 5, 7 );  // 12

    bsh的方法可以有動(dòng)態(tài)的(寬松的)參數(shù)和返回類(lèi)型。

    • add( a, b ) {
          return a + b;
      }
      foo = add(1, 2);            // 3
      foo = add("Oh", " baby");   // "Oh baby"

    實(shí)現(xiàn)Interface

    注意:如果要BeanShell能實(shí)現(xiàn)任意的Interface,必須有jdk1.3及以上支持。
    你可以在腳本中用標(biāo)準(zhǔn)的Java內(nèi)部類(lèi)的語(yǔ)法來(lái)實(shí)現(xiàn)Interface.例如:

    • ActionListener scriptedListener = new ActionListener() {
          actionPerformed( event ) { ... }
      }

    你 可以不用實(shí)現(xiàn)Interface的所有方法,而只用實(shí)現(xiàn)你需要的方法。如果代碼中調(diào)用了未被實(shí)現(xiàn)的方法,將丟出異常。如果你想重載大量的方法的行為--例 如為日志生成一個(gè)"啞"適配器--你可以在腳本對(duì)象中實(shí)現(xiàn)一個(gè)特殊的方法:invoke(name,args)。invoke()方法用來(lái)處理任何未被定 義的方法的調(diào)用:

    • ml = new MouseListener() {
          mousePressed( event ) { ... }
          // handle the rest
          invoke( name, args ) { print("Method: "+name+" invoked!");
      }

    腳本對(duì)象

    在 BeanShell中,和在JavaScript與Perl中一樣,腳本對(duì)象是用封閉的方法體一構(gòu)成的。通過(guò)在方法未尾返回一個(gè)特殊值"this",你就 可以像使用方法一樣調(diào)用這個(gè)對(duì)象了。在這個(gè)方法調(diào)用時(shí),你可以給與它任何的值。通常對(duì)象內(nèi)部需要包括方法,所以BeanShell的腳本方法在一定程度上 可再包含一些方法以構(gòu)成腳本對(duì)象。例如:

    • foo() {
          print("foo");
          x=5;
          bar() {
              print("bar");
          }
          return this;
      }
      myfoo = foo();    // prints "foo"
      print( myfoo.x ); // prints "5"
      myfoo.bar();      // prints "bar"

    如果這些代碼對(duì)你來(lái)說(shuō)很陌生,別急,請(qǐng)用戶(hù)手冊(cè)可得到更透徹的解釋。

    在 你的腳本中,BeanShell腳本對(duì)象(也就是先前例子中的"this"參照)能自動(dòng)實(shí)現(xiàn)任何JAVA介面類(lèi)型。當(dāng)JAVA代碼調(diào)用相應(yīng)與之通訊的腳本 方法內(nèi)的方法。當(dāng)你試著將腳本對(duì)象作為參數(shù)傳給Java方法時(shí),BeanShell會(huì)自動(dòng)將它造型(cast)為相應(yīng)的類(lèi)型。如要傳遞BeanShell 外部的對(duì)象時(shí),你可以在需要時(shí)顯式的進(jìn)行造型(cast).請(qǐng)看用戶(hù)手冊(cè)中的詳細(xì)內(nèi)容。

    從你的應(yīng)用程序調(diào)用BeanShell

    通過(guò)建立一個(gè)BeanShell解釋器,使用eval()或source()命令,你可以在你的應(yīng)用程序中求文本表達(dá)式的值和運(yùn)行腳本。如果你希望在你的腳本內(nèi)部使用一個(gè)對(duì)象,可以用set()方法傳遞對(duì)象的變量參照給BeanShell,并通過(guò)get()方法取得結(jié)果。

    • import bsh.Interpreter;
      Interpreter i = new Interpreter();  // Construct an interpreter
      i.set("foo", 5);                    // Set variables
      i.set("date", new Date() );
      Date date = (Date)i.get("date");    // retrieve a variable
      // Eval a statement and get the result
      i.eval("bar = foo*10");            
      System.out.println( i.get("bar") );
      // Source an external script file
      i.source("somefile.bsh");

     

    BeanShell將成為Java平臺(tái)上的第三種編程語(yǔ)言
    2005-06-08  點(diǎn)擊:8  來(lái)源:CSDN  作者:CSDN
    JCP接納了一個(gè)新的技術(shù)規(guī)范進(jìn)入標(biāo)準(zhǔn)化進(jìn)程,這個(gè)編號(hào)為JSR-274的技術(shù)規(guī)范將把BeanShell引入為Java平臺(tái)上支持的又一種編程語(yǔ)言。

    JSR- 274(http://jcp.org/en/jsr/detail?id=274)是由 Patrick Niemeyer提交的技術(shù)規(guī)范,其目標(biāo)是將BeanShell腳本語(yǔ)言(http://www.beanshell.org/)規(guī)范化為Java虛擬機(jī) 平臺(tái)上支持的第三種編程語(yǔ)言。除了Java之外,Java虛擬機(jī)還支持Groovy腳本語(yǔ)言。Doug Lea、Apache和Google三個(gè)JCP執(zhí)委會(huì)成員對(duì)此規(guī)范表示了支持。

    按照J(rèn)ava最初的設(shè)計(jì)思路,有很多語(yǔ)言都可以在JVM上 運(yùn)行(詳細(xì)列表參見(jiàn)http://en.wikipedia.org/wiki/List_of_Java_scripting_languages), 但這些語(yǔ)言大多沒(méi)有流行起來(lái)。直到2004年為止,Java平臺(tái)事實(shí)上只有一種編程語(yǔ)言,也就是Java。2004年3月,Groovy(JSR- 241)成為了Java平臺(tái)上的第二種編程語(yǔ)言。

    消息全文請(qǐng)看:http://rmh.blogs.com/weblog/2005/05/beanshell_the_3.html

    http://www.cn-java.com/target/news.php?news_id=2450

    簡(jiǎn)介:
    BeanShell是一種腳本語(yǔ)言,一種完全符合java語(yǔ)法的java腳本語(yǔ)言,并且又擁有自己的一些語(yǔ)法和方法,beanShell是一種松散類(lèi)型的腳本語(yǔ)言(這點(diǎn)和JS類(lèi)似)。
    下載地址:http://www.beanshell.org

    設(shè)置環(huán)境
    l 把;bsh-xx.jar放到$JAVA_HOME/jre/lib/ext文件夾下
    l unix: export CLASSPATH=$CLASSPATH:bsh-xx.jar
    l windows: set classpath %classpath%;bsh-xx.jar

    運(yùn)行方式:
    l 界面UI方式 :java bsh.Console
    l 命令行方式 :java bsh.Interpreter
    l 運(yùn)行腳本文件:java bsh.Interpreter filename [ args ]



    簡(jiǎn)單舉例:
    在classpath中設(shè)置好環(huán)境變量,打開(kāi)dos窗口,鍵入:java bsh.Console命令
    出現(xiàn)BeanShell圖片代表設(shè)置成功,beanshell開(kāi)始運(yùn)行





    測(cè)試內(nèi)容:
    設(shè)置變量
    foo = "Foo";
    four = (2 + 2)*2/2;
    打印變量
    print( foo + " = " + four );
    循環(huán)
    for (i=0; i<5; i++)
    print(i);
    在窗口中打印按鈕
    button = new JButton( "My Button" );
    frame = new JFrame( "My Frame" );
    frame.getContentPane().add( button, "Center" );
    frame.pack();
    frame.setVisible(true);

    完整代碼:
    foo = "Foo";
    four = (2 + 2)*2/2;
    print( foo + " = " + four );

    for (i=0; i<5; i++)
    print(i);

    button = new JButton( "My Button" );
    frame = new JFrame( "My Frame" );
    frame.getContentPane().add( button, "Center" );
    frame.pack();
    frame.setVisible(true);


    在窗口中輸入上面的代碼

    敲回車(chē)執(zhí)行,運(yùn)行結(jié)果如圖


    說(shuō)明:
    因?yàn)閎eanshell是松散類(lèi)型的腳本語(yǔ)言因此可以直接寫(xiě)
    foo = "Foo";
    four = (2 + 2)*2/2;

    print是beanshell提供一種簡(jiǎn)單的打印命令相當(dāng)于java中的System.out.println()





    其他的beanshell腳本命令
    · source(), run() – 讀取,或者運(yùn)行一個(gè)腳本文件
    · frame() – 顯示一個(gè)窗口
    · load(), save() – 讀取或者保存一個(gè)腳本對(duì)象到文件
    · cd(), cat(), dir(), pwd(), etc. 使用Unix下面的命令
    · exec() – 運(yùn)行一個(gè)本地的方法
    · javap() –使用javap命令.
    · setAccessibility() – 設(shè)置可以接收private和protected類(lèi)型的變量
    BeanShell命令不一定都是內(nèi)置的腳本命令,腳本方法會(huì)自動(dòng)從classpath中取方法使用,因此你可以添加你自己的腳本到classpath中來(lái)擴(kuò)充基本的命令






    腳本方法
    一般的方法:
    int addTwoNumbers( int a, int b ) {
    return a + b;
    }

    sum = addTwoNumbers( 5, 7 ); // 12
    也可以使用動(dòng)態(tài)的變量類(lèi)型(無(wú)狀態(tài))方法
    add( a, b ) {
    return a + b;
    }
    foo = add(1, 2); // 3
    foo = add(1, “2”); //”12” 只要有一個(gè)為字符串全部按照字符串處理,系統(tǒng)不會(huì)根據(jù)1是數(shù)字在前把“2”轉(zhuǎn)換成數(shù)字處理(特別注意)
    foo = add("Oh", " baby"); // "Oh baby"




    實(shí)現(xiàn)接口
    實(shí)現(xiàn)任何接口需要java1.3或者更高
    可以使用缺省的java匿名類(lèi)的語(yǔ)法實(shí)現(xiàn)一個(gè)接口類(lèi),例如:
    ActionListener scriptedListener = new ActionListener() {
    actionPerformed( event ) { ... }
    }
    不需要實(shí)現(xiàn)接口的所有的方法,只需要實(shí)現(xiàn)你使用的方法即可,如果使用你沒(méi)有實(shí)現(xiàn)的方法,beanshell將拋出一個(gè)錯(cuò)誤,
    ml = new MouseListener() {
    mousePressed( event ) { ... }
    // handle the rest
    invoke( name, args ) { print("Method: "+name+" invoked!");
    }








    腳本對(duì)象
    使用特殊的關(guān)鍵字this可以創(chuàng)建一個(gè)對(duì)象(根JS類(lèi)似)
    foo() {
    print("foo");
    x=5;

    bar() {
    print("bar");
    }

    return this;
    }

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

    從應(yīng)用程序中調(diào)用BeanShell
    創(chuàng)建一個(gè)BeanShell的解釋器(interpreter)用eval()和source()命令可以對(duì)一個(gè)字符串求值和運(yùn)行一個(gè)腳本文件
    使用set()方法可以給一個(gè)對(duì)象傳入一個(gè)變量的參考
    使用get()方法可以重新得到一個(gè)變量的結(jié)果


    完整代碼:
    package cn.com.sparknet.util;

    import bsh.*;
    import java.util.*;

    public class BeanShell {
    public static void main(String[] args) {
    try {
    Interpreter interpreter = new Interpreter(); // 構(gòu)造一個(gè)解釋器
    interpreter.set("foo", 5); // 設(shè)置變量
    interpreter.set("date", new Date()); //設(shè)置一個(gè)時(shí)間對(duì)象
    Date date = (Date) interpreter.get("date"); // 重新得到時(shí)間變量
    interpreter.println(date.toString()); //打印時(shí)間變量
    interpreter.eval("bar = foo*10"); // 對(duì)一段腳本求值,并得到結(jié)果
    System.out.println(interpreter.get("bar")); //打印變量
    interpreter.source("d:\\helloWorld.bsh"); // 導(dǎo)入并執(zhí)行一個(gè)腳本文件
    }
    catch (Exception e) {
    //如果發(fā)生異常,寫(xiě)入日志文件
    Log.error(new BeanShell(), "main", FormatDate.getCurrDate(), e.getMessage());
    }
    }
    }






    BeanShell語(yǔ)法
    BeanShell是一種最原始的java解釋器。
    標(biāo)準(zhǔn)的java語(yǔ)法
    /*
    Standard Java syntax
    */

    // Use a hashtable
    Hashtable hashtable = new Hashtable();
    Date date = new Date();
    hashtable.put( "today", date );

    // Print the current clock value
    print( System.currentTimeMillis() );

    // Loop
    for (int i=0; i<5; i++)
    print(i);

    // Pop up a frame with a button in it
    JButton button = new JButton( "My Button" );
    JFrame frame = new JFrame( "My Frame" );
    frame.getContentPane().add( button, "Center" );
    frame.pack();
    frame.setVisible(true);
    松散類(lèi)型的java語(yǔ)法
    /*
    Loosely Typed Java syntax
    */

    // Use a hashtable
    hashtable = new Hashtable();
    date = new Date();
    hashtable.put( "today", date );

    // Print the current clock value
    print( System.currentTimeMillis() );

    // Loop
    for (i=0; i<5; i++)
    print(i);

    // Pop up a frame with a button in it
    button = new JButton( "My Button" );
    frame = new JFrame( "My Frame" );
    frame.getContentPane().add( button, "Center" );
    frame.pack();
    frame.setVisible(true);
    異常處理
    標(biāo)準(zhǔn)的java異常
    try {
    int i = 1/0;
    } catch ( ArithmeticException e ) {
    print( e );
    }
    松散的異常處理(類(lèi)似JS)
    try {
    ...
    } catch ( e ) {
    ...
    }
    松散類(lèi)型變量的作用范圍
    標(biāo) 準(zhǔn)的java程序的變量作用范圍是在一個(gè)模塊中的(在模塊中聲明的變量),而在松散類(lèi)型的語(yǔ)言中如果在一個(gè)模塊中沒(méi)有指定一個(gè)變量的類(lèi)型,則認(rèn)為是一個(gè)全 局變量(只有它以后的代碼可以使用該變量,系統(tǒng)在調(diào)用該變量的時(shí)候自動(dòng)生成一個(gè)全局變量,也就為什么在調(diào)用模塊之前不能使用該變量的原因)
    // Arbitrary code block
    {
    y = 2; // Untyped variable assigned
    int x = 1; // Typed variable assigned
    }
    print( y ); // 2
    print( x ); // Error! x is undefined.

    // Same with any block statement: if, while, try/catch, etc.
    if ( true ) {
    y = 2; // Untyped variable assigned
    int x = 1; // Typed variable assigned
    }
    print( y ); // 2
    print( x ); // Error! x is undefined.

    同樣也使用于for-loop, if-else等循環(huán)語(yǔ)句
    for( int i=0; i<10; i++ ) { // typed for-init variable
    j=42;
    }
    print( i ); // Error! 'i' is undefined.
    print( j ); // 42

    for( z=0; z<10; z++ ) { } // untyped for-init variable
    print( z ); // 10









    方便靈活的語(yǔ)法
    標(biāo)準(zhǔn)的java語(yǔ)法
    java.awt.Button button = new java.awt.Button();
    button.setLabel(“javaButton”);
    松散的語(yǔ)法
    button = new java.awt.Button();
    button.label = "my button";
    你也可以使用{}來(lái)對(duì)一個(gè)對(duì)象設(shè)置屬性
    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");




    包裝和未包裝(box和unbox)
    BeanShell自動(dòng)轉(zhuǎn)為簡(jiǎn)單類(lèi)型
    i=5;
    iw=new Integer(5);
    print( i * iw ); // 25
    導(dǎo)入類(lèi)和包
    import javax.xml.parsers.*;
    import mypackage.MyClass;
    超級(jí)導(dǎo)入法:
    import *;
    BeanShell默認(rèn)導(dǎo)入下面的包
    · java.lang
    · java.io
    · java.util
    · java.net
    · java.awt
    · java.awt.event
    · javax.swing
    · javax.swing.event
    友好文檔實(shí)體
    BeanShell支持特殊的文檔操作類(lèi)型內(nèi)容
    @gt > @lt <
    @lteq <= @gteq >=
    @or || @and &&
    @bitwise_and & @bitwise_or |
    @left_shift << @right_shift >>
    @right_unsigned_shift >>> @and_assign &=
    @or_assign |= @left_shift_assign <<=
    @right_shift_assign >>= @right_unsigned_shift_assign >>>=
    腳本方法
    你可以定義方法象java中的定義方法一樣
    int addTwoNumbers( int a, int b ) {
    return a + b;
    }
    你可以使用內(nèi)餡的BeanShell方法使用他們
    sum = addTwoNumbers( 5, 7 );
    只有BeanShell變量可以被動(dòng)態(tài)定義為動(dòng)態(tài)類(lèi)型,方法可以有動(dòng)態(tài)的參數(shù)以及返回類(lèi)型
    add( a, b ) {
    return a + b;
    }
    在這個(gè)方法中,BeanShell將動(dòng)態(tài)的決定類(lèi)型當(dāng)這個(gè)方法被調(diào)用時(shí)并且能夠準(zhǔn)確的計(jì)算出你想要的結(jié)果
    foo = add(1, 2);
    print( foo ); // 3

    foo = add("Oh", " baby");
    print( foo ); // Oh baby
    在第一個(gè)例子中BeanShell將把參數(shù)定義為數(shù)字型,并返回?cái)?shù)字型
    在第二個(gè)例子中BeanShell將把參數(shù)定義為字符型,并返回字符對(duì)象
    變量和方法的可見(jiàn)范圍
    就像您所預(yù)期的那樣,在方法內(nèi)您可以參考到上下文中上面的變量和方法
    a = 42;
    someMethod() { ... }

    foo() {
    print( a );
    someMethod(); // invoke someMethod()
    }

    // invoke foo()
    foo(); // prints 42
    如果一個(gè)變量只有在方法內(nèi)使用請(qǐng)定義成局部變量,即加上類(lèi)型,如果是全局變量請(qǐng)?jiān)诜椒ㄍ舛x
    var = "global";
    foo() {
    print(var);
    String var = "local";
    print(var);
    }
    foo();
    print(var);
    將打印出
    global
    local
    global
    方法內(nèi)的var(第四行)變量屬于局部變量,不會(huì)覆蓋全局變量var(第一行)的因此改變var(第四行)變量不會(huì)影響到全局變量var(第一行)
    范圍參考:super
    使用super關(guān)鍵字可以在局部參考到全局變量
    var = "global";
    foo() {
    String var = "local";
    print(var);
    print(super.var);
    }
    foo();
    將輸出
    local
    global







    腳本對(duì)象
    this對(duì)象
    在java標(biāo)準(zhǔn)語(yǔ)言中可以使用this返回一個(gè)類(lèi)的一個(gè)實(shí)例
    // MyClass.java
    MyClass {
    Object getObject() {
    return this; // return a reference to our object
    }
    }
    在這個(gè)例子中g(shù)etObject() 方法是返回MyClass類(lèi)的一個(gè)實(shí)例
    在BeanShell中對(duì)象中的變量只是局部的變量在對(duì)象內(nèi)可以使用,在對(duì)象外是不可以使用(不同于前面for-loop,if-else中的使用);
    // Define the foo() method:
    foo() {
    bar = 42;
    print( bar );
    }

    // Invoke the foo() method:
    foo(); // prints 42

    print( bar ); // Error, bar is undefined here
    可以使用this返回對(duì)象,使用對(duì)象加上“.”運(yùn)算符參考屬性(類(lèi)似JS)
    foo() {
    bar = 42;
    return this;
    }

    fooObj = foo();
    print( fooObj.bar ); // prints 42!
    同樣對(duì)象中也可以定義一些方法
    foo() {
    bar() {
    ...
    }
    }
    例如
    foo() {
    int a = 42;
    bar() {
    print("The bar is open!");
    }

    bar();
    return this;
    }

    // Construct the foo object
    fooObj = foo(); // prints "the bar is open!"
    // Print a variable of the foo object
    print ( fooObj.a ) // 42
    // Invoke a method on the foo object
    fooObj.bar(); // prints "the bar is open!"
    也可以把bar()和foo也可以代參數(shù)
    foo() {
    return this;
    }
    bar(int a) {
    print("The bar is open!" + a);
    }
    foo().bar(1);
    也可以把bar()方法定義到對(duì)象外面

    foo() {
    bar(int a) {
    print("The bar is open!" + a);
    }
    return this;
    }
    foo().bar(1);
    BeanShell一種松散的腳本語(yǔ)言,有很多中聲明的方法可以使用
    This super global
    This是參考當(dāng)前對(duì)象
    Super是參考父親對(duì)象
    Global是參考最上層對(duì)象
    super.super.super...foo = 42; // Chain super. to reach the top
    global.foo = 42;








    簡(jiǎn)單例子:
    文本拖動(dòng):

    dragText() {
    f = new Frame("Drag in the box");
    f.setFont( new Font("Serif", Font.BOLD, 24) );
    f.setSize(300, 300);
    f.show();
    gc = f.getGraphics();
    gc.setColor(Color.cyan);
    mouseDragged( e ) {
    gc.drawString("Drag Me!", e.getX(), e.getY());
    }
    mouseMoved( e ) { }
    f.addMouseMotionListener( this );
    }
    簡(jiǎn)單畫(huà)圖

    import bsh.util.BshCanvas; // BshCanvas simply buffers graphics

    graph( int width, int height ) {
    canvas=new BshCanvas();
    canvas.setSize( width, height );
    frame=frame( canvas );
    graphics=canvas.getBufferedGraphics();
    // draw axis
    graphics.setColor( Color.red );
    graphics.drawLine( 0, height/2, width, height/2 );
    graphics.drawLine( width/2, 0, width/2, height );
    graphics.setColor( Color.black );

    plot(int x, int y) {
    graphics.fillOval( (x+width/2-1), (y+height/2-1), 3, 3);
    canvas.repaint();
    }

    return this;
    }

    drawSin( graph ) {
    for (int x=-100; x<100; x++ ) {
    y=(int)(50*Math.sin( x/10.0 ));
    graph.plot( x, y );
    }
    }
    簡(jiǎn)單web瀏覽器

    import javax.swing.*;
    import javax.swing.event.*;
    import javax.swing.text.*;
    import java.awt.event.*;
    import java.awt.*;

    JFrame browser( startingUrl ) {
    invoke( method, args ) {}

    windowClosing(WindowEvent we) {
    we.getWindow().setVisible(false);
    }

    setPage( url ) {
    try {
    pane.setPage( url );
    } catch(Exception e) {
    statusBar.setText("Error opening page: "+url);
    }
    }

    hyperlinkUpdate( HyperlinkEvent he ) {
    type = he.getEventType();
    if (type == HyperlinkEvent.EventType.ENTERED) {
    pane.setCursor(
    Cursor.getPredefinedCursor( Cursor.HAND_CURSOR) );
    statusBar.setText(he.getURL().toString());
    } else
    if (type == HyperlinkEvent.EventType.EXITED) {
    pane.setCursor( Cursor.getDefaultCursor() );
    statusBar.setText(" ");
    } else {
    setPage( he.getURL() );
    if (urlField != null)
    urlField.setText(he.getURL().toString());
    }
    }

    frame = new JFrame("Browser");
    frame.setSize(400,300);
    frame.addWindowListener( this );

    urlPanel = new JPanel();
    urlPanel.setLayout(new BorderLayout());
    urlField = new JTextField(startingUrl);
    urlPanel.add(new JLabel("Site: "), BorderLayout.WEST);
    urlPanel.add(urlField, BorderLayout.CENTER);

    statusBar = new JLabel(" ");
    pane = new JEditorPane();
    pane.setEditable(false);
    setPage( startingUrl );
    jsp = new JScrollPane(pane);

    frame.getContentPane().add(jsp, BorderLayout.CENTER);
    frame.getContentPane().add(urlPanel, BorderLayout.SOUTH);
    frame.getContentPane().add(statusBar, BorderLayout.NORTH);

    // This is the equivalent of an inner class in bsh.
    urlTextHandler() {
    actionPerformed(ActionEvent ae) {
    setPage( ae.getActionCommand() );
    }
    return this;
    }

    urlField.addActionListener( urlTextHandler() );
    pane.addHyperlinkListener( (HyperlinkListener)this );

    return frame;
    }
    browser = browser("http://java.sun.com/");
    browser.show();




    更多的文檔參考BeanShell網(wǎng)站

    http://www.beanshell.org
    posted on 2008-10-08 14:34 xiaoxinchen 閱讀(2472) 評(píng)論(0)  編輯  收藏

    只有注冊(cè)用戶(hù)登錄后才能發(fā)表評(píng)論。


    網(wǎng)站導(dǎo)航:
     
    主站蜘蛛池模板: 性xxxx视频免费播放直播 | 亚洲中文字幕无码一久久区| 亚洲综合图色40p| 91情侣在线精品国产免费| 精品一区二区三区免费| 乱淫片免费影院观看| 亚洲熟妇AV乱码在线观看| 亚洲综合免费视频| 国产亚洲一区二区在线观看| 亚洲AV中文无码乱人伦| 国产高清在线精品免费软件| 在线v片免费观看视频| 曰批全过程免费视频播放网站 | 亚洲精品视频免费观看| 日韩成人在线免费视频| 成人免费午夜在线观看| 国产1000部成人免费视频| 99爱免费观看视频在线| 国产va在线观看免费| 色偷偷亚洲女人天堂观看欧| 老司机亚洲精品影院无码| 免费黄色一级毛片| 手机在线免费视频| 久久精品无码一区二区三区免费 | 久久亚洲美女精品国产精品| 亚洲成AV人片在线播放无码| 国产亚洲成av人片在线观看| 亚洲人成影院在线无码按摩店| 国产免费丝袜调教视频| 18女人毛片水真多免费| 成人福利免费视频| 在线观看成人免费视频不卡| 18级成人毛片免费观看| 99久久免费国产香蕉麻豆| 日本在线高清免费爱做网站| 美女网站免费福利视频| 日韩精品无码区免费专区 | 亚洲一区在线免费观看| 久久久久精品国产亚洲AV无码| 国产精品高清视亚洲精品| 亚洲一区AV无码少妇电影|