首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 相關知識

Java 開發者快速上手 ActionScript 3:語言特性對比與實戰入門

     編輯:Java 相關知識

客戶端開發向來非 Java 程式員舒適區:Applet/Swing/JavaFX 成果有限,JavaScript 僅名字相似。但 ActionScript 3 (AS3) 隨 Adobe Flex/Flash 而來,強型別、一級物件導向、介面、屬性存取器、E4X 原生 XML 操作 等特性,讓 Java 開發者倍感親切。Flex SDK 完全免費,Flex Builder IDE 付費但功能強大。

類別與介面

AS3 同樣「一切皆物件」(基本型別除外),支援套件命名空間 (如 com.jherrington.animals)。

定義類別

package com.jherrington.animals {
    public class Animal {
        public var name:String = "";
        private var age:int = 0;
        private var myLocation:Point = new Point(0,0);

        public function Animal(_name:String, _age:int = 30) {
            name = _name;
            age = _age;
        }

        // 屬性存取器 (關鍵差異)
        public function set location(pt:Point):void { myLocation = pt; }
        public function get location():Point { return myLocation; }

        public function moveTo(x:int, y:int):void {
            myLocation.x = x; myLocation.y = y;
        }
    }
}

型別宣告後置 (var name:String) 因強型別為後加特性,保留舊代碼相容。建構子同類名,支援預設參數值。

事件驅動與屬性存取器

繼承 EventDispatcher,在 setter 發送事件:

public function set location(pt:Point):void {
    myLocation = pt;
    dispatchEvent(new Event(Event.CHANGE));
}

客戶端程式碼:

var a:Animal = new Animal();
a.addEventListener(Event.CHANGE, function(e:Event):void { trace("The animal has moved!"); });
a.location = new Point(10, 20); // 觸發 setter 並發送事件

大多數類別均為 EventDispatcher,可輕鬆加入監聽器。

介面定義與實作

public interface IAnimal {
    function get name():String;
    function set name(n:String):void;
    function get location():Point;
    function set location(pt:Point):void;
}

public class Animal extends EventDispatcher implements IAnimal {
    private var myName:String = "";
    public function get name():String { return myName; }
    public function set name(n:String):void { myName = n; dispatchEvent(new Event(Event.CHANGE)); }
    // ... location getter/setter 同前
}

介面可定義屬性存取器,單一繼承、多重實作同 Java。

靜態成員與單例模式

public const MINIMUM_AGE:int = 0;
public const MAXIMUM_AGE:int = 2000;

public static function buildAnimal(n:String):IAnimal { return new Animal(n); }

// 單例工廠
public class AnimalFactory {
    private static var _factory:AnimalFactory = new AnimalFactory();
    public static function get instance():AnimalFactory { return _factory; }
    public function build(n:String):Animal { return new Animal(n); }
}
// 使用
var b:Animal = AnimalFactory.instance.build("Russell");

繼承與覆寫

public class Animal extends EventDispatcher implements IAnimal {
    public virtual function move(x:int, y:int):void { } // virtual 允許覆寫
}

public class Dog extends Animal {
    public function Dog(_name:String) { super(_name); }
    public override function move(x:int, y:int):void { trace('Moving to '+x+', '+y); }
}

virtual/override 關鍵字明確控制繼承鏈,極似 Java。

運算子、條件與異常處理

算術、邏輯、三元運算子語法完全相同。if/else、try/catch/finally、throw new Exception() 無差異。自訂異常類別同樣支援。

迭代與集合

無強型別容器類,但陣列與雜湊表 (基於 Object 插槽機制) 使用直觀:

// 陣列迭代 (推薦 for each)
var values:Array = [1, 2, 5];
for each (var i:int in values) trace(i);

// 雜湊表
var params:Object = { first:'Jack', last:'Herrington' };
for (var key:String in params) trace(key + ' = ' + params[key]);

正則表達式與 E4X (XML 原生支援)

正則為語法內建:if (name.search(/jack/i)) trace('hello jack');、values.split(/,/)。

E4X 讓 XML 操作如同物件導向

var myData:XML = 
    Jack
    Oso
    Sadie
;
for each (var name:XML in myData..name) trace(name.toString());

// 依屬性過濾 (@ 類 XPath)
var myData:XML = 
    Jack
    Oso
    Sadie
;
for each (var name:XML in myData..name.(@type=='dog')) trace(name.toString());

E4X 將 XML 解析從繁瑣變為輕鬆,Web Service 回傳 E4X 格式更便於處理。

總結

AS3 吸取 Java 得失教訓,融合強型別、物件導向、事件模型、原生 XML,是成熟度極高的客戶端語言。Java 開發者幾乎零學習曲線即可投入 Flex/Flash 開發,值得深入探索。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved