Java5和ActionScript3的語法比較

原帖在 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

 

 

發佈了44 篇原創文章 · 獲贊 3 · 訪問量 10萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章