原帖在 Comparing the syntax of Java 5 and ActionScript 3
下表列出了兩種語言的主要元素、概念的比較,以供參考。你可以從左向右或從右向左進行閱讀。該列表並不完善,可在評論中添加。
Concept/Language Construct |
Java 5.0 |
ActionScript 3.0 |
類庫打包 |
.jar |
.swc |
繼承 Inheritance |
class Employee extends Person{…} |
class Employee extends Person{…}
|
變量的聲明與初始化 Variable declaration and initialization |
String firstName=”John”; Date shipDate=new Date(); int i; int a, b=10; double salary; |
var firstName:String=”John”; var shipDate:Date=new Date(); var i:int; var a:int, b:int=10; var salary:Number; |
未聲明變量 Undeclared variables |
n/a |
It’s an equivalent to the wild card type notation *. If you declare a variable but do not specify its type, the * type will apply.即任意類型。 A default value: undefined var myVar:*;
|
變量作用域 Variable scopes |
block: declared within curly braces, local: declared within a method or a block
member: declared on the class level
no global variables |
No block scope: the minimal scope is a function
local: declared within a function
member: declared on the class level
If a variable is declared outside of any function or class definition, it has global scope. |
字符串 Strings |
Immutable, store sequences of two-byte Unicode characters |
Immutable, store sequences of two-byte Unicode characters |
語句結束符(;) |
必須 A must |
可省略 If you write one statement per line you can omit it. |
嚴格相等運算符 Strict equality operator |
n/a |
=== for strict non-equality use !== |
常數 Constant qualifier |
The keyword final
final int STATE=”NY”; |
The keyword const
const STATE:int =”NY”; |
類型檢查Type checking |
Static (checked at compile time) |
Dynamic (checked at run-time) and static (it’s so called ‘strict mode’, which is default in Flex Builder) |
類型檢查運算符Type check operator |
instanceof |
is – checks data type, i.e. if (myVar is String){…}
The is operator is a replacement of older instanceof |
as運算符 The as operator |
n/a |
Similar to is operator, but returns not Boolean, but the result of expression:
var orderId:String=”123”; var orderIdN:Number=orderId as Number; trace(orderIdN);//prints 123
|
基本數據類型Primitives |
byte, int, long, float, double,short, boolean, char |
all primitives in ActionScript are objects. Boolean, int, uint, Number, String
The following lines are equivalent; var age:int = 25; var age:int = new int(25);
|
複雜數據類型Complex types |
n/a |
Array, Date, Error, Function, RegExp, XML, and XMLList |
數組聲明與初始化Array declaration and instantiation |
int quarterResults[]; quarterResults = new int[4];
int quarterResults[]={25,33,56,84};
|
var quarterResults:Array =new Array(); or var quarterResults:Array=[];
var quarterResults:Array= [25, 33, 56, 84]; 關聯數組AS3 also has associative arrays that uses named elements instead of numeric indexes (similar to Hashtable). |
根類 The top class in the inheritance tree |
Object
|
Object |
類型轉換 Casting syntax: cast the class Object to Person:
|
Person p=(Person) myObject;
|
var p:Person= Person(myObject); or var p:Person= myObject as Person; |
類型向上轉換upcasting |
class Xyz extends Abc{} Abc myObj = new Xyz();
|
class Xyz extends Abc{} var myObj:Abc=new Xyz(); |
無類型變量Un-typed variable |
n/a |
var myObject:* var myObject: |
包packages |
package com.xyz; class myClass {…} |
package com.xyz{ class myClass{…} } ActionScript packages can include not only classes, but separate functions as well |
類訪問層次Class access levels |
public, private, protected if none is specified, classes have package access level |
public, private, protected if none is specified, classes have internal access level (similar to package access level in Java) |
命名空間Custom access levels: namespaces |
n/a |
Similar to XML namespaces. namespace abc; abc function myCalc(){}
or
abc::myCalc(){}
use namespace abc ;
|
控制檯輸出Console output |
System.out.println(); |
// in debug mode only trace();
|
imports導入 |
import com.abc.*; import com.abc.MyClass; |
import com.abc.*; import com.abc.MyClass;
packages must be imported even if the class names are fully qualified in the code. |
無序鍵值對Unordered key-value pairs |
Hashtable, Map
Hashtable friends = new Hashtable();
friends.put(”good”, “Mary”); friends.put(”best”, “Bill”); friends.put(”bad”, “Masha”);
String bestFriend= friends.get(“best”); // bestFriend is Bill |
Associative Arrays關聯數組
Allows referencing its elements by names instead of indexes. var friends:Array=new Array(); friends["good"]=”Mary”; friends["best"]=”Bill”; friends["bad"]=”Masha”;
var bestFriend:String= friends[“best”]
friends.best=”Alex”;
Another syntax: var car:Object = {make:”Toyota”, model:”Camry”}; trace (car["make"], car.model); // Output: Toyota Camry |
Hoisting |
n/a |
Compiler moves all variable declarations to the top of the function, so you can use a variable name even before it’s been explicitly declared in the code. |
對象實例化Instantiation objects from classes |
Customer cmr = new Customer();
Class cls = Class.forName(“Customer”); Object myObj= cls.newInstance(); |
var cmr:Customer = new Customer();
var cls:Class = flash.util.getClassByName(”Customer”); var myObj:Object = new cls(); |
私有類Private classes |
private class myClass{…} |
There is no private classes in AS3.
|
私有構造函數Private constructors |
Supported. Typical use: singleton classes. |
Not available. Implementation of private constructors is postponed as they are not the part of the ECMAScript standard yet. To create a Singleton, use public static getInstance(), which sets a private flag instanceExists after the first instantiation. Check this flag in the public constructor, and if instanceExists==true, throw an error. |
類和文件名Class and file names |
A file can have multiple class declarations, but only one of them can be public, and the file must have the same name as this class. |
A file can have multiple class declarations, but only one of them can be placed inside the package declaration, and the file must have the same name as this class. |
包What can be placed in a package |
Classes and interfaces |
Classes, interfaces, variables, functions, namespaces, and executable statements. |
動態類 Dynamic classes (define an object that can be altered at runtime by adding or changing properties and methods). |
n/a |
dynamic class Person { var name:String; } //Dynamically add a variable // and a function var p:Person = new Person(); p.name=”Joe”; p.age=25; p.printMe = function () { trace (p.name, p.age); } p.printMe(); // Joe 25 |
函數閉包function closures |
n/a. Closure is a proposed addition to Java 7. |
myButton.addEventListener(“click”, myMethod); A closure is an object that represents a snapshot of a function with its lexical context (variable’s values, objects in the scope). A function closure can be passed as an argument and executed without being a part of any object |
抽象類Abstract classes |
supported |
n/a |
函數覆蓋Function overriding |
supported |
Supported. You must use the override qualifier |
函數重載Function overloading |
supported |
Not supported. |
接口Interfaces |
class A implements B{…} interfaces can contain method declarations and final variables. |
class A implements B{…} interfaces can contain only function declarations. |
異常處理Exception handling |
Keywords: try, catch, throw, finally, throws
Uncaught exceptions are propagated to the calling method. |
Keywords: try, catch, throw, finally
A method does not have to declare exceptions. Can throw not only Error objects, but also numbers:
throw 25.3;
Flash Player terminates the script in case of uncaught exception.
|
正則表達式Regular expressions |
Supported |
Supported |