比较 java 与 actionscript (不完全翻译)

原始文献

Rich Internet Applications with Adobe Flex & Java

页码号

37-42

翻译者

刘锦行(whizen)

翻译时间

2008-4-19

修订记录

 

 

我们不能提供书中的2种语言的差别的详细描述,不过还是列出了一个比较表格对2者的主要元素和特性进行比较,作为快速参考。你可以选择先读左边还是先读右边取决于你的主要开发语言是什么。

设计思想/语言架构

java 5.0

actionscript 3.0

类库的包后缀

.jar

.swc

继承

Class Employee extends Person {…}

Class Employee extends Person {…}

变量的声明和初始化

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;

未声明的变量

n/a

如果你声明一个变量却不声明其类型,那么他会被自动赋予*类型,*类型与通配符*的用法基本相同,代表可以匹配所有类型.

 

编译的时候你的代码会被优化为:undefined var myVar:*;

变量的作用域

代码块:使用一对大括号表示作用范围(这里的代码块是指小于方法作用域的大括号,例如:循环体.在这些方法中嵌套的大括号里面定义的变量只有在里面才能用)

本地变量:需要在方法的代码块中声明

方法:定义在CLASS后面的大括号里面

没有全局变量

没有代码块作用域:最小的作用域是方法.

本地变量:只能在方法中声明

成员变量:class里面方法外面声明

 

如果一个变量在所有方法和类以外的空间中定义,那么他是一个全局变量

字符串

不可变的,2 byteUnicode字符序列方式保存

不可变的,2 byteUnicode字符序列方式保存

是否使用分号结束一段代码

必须使用

如果你以行的方式来分割代码可以省略分号

严格的类型比较的操作符(不进行自动类型转换)

n/a

===

严格的全不等运算符

!==

声明常量的关键字

使用final关键字

使用const关键字

类型检查

严格(在编译的时候检查)

动态(在运行期检查)和严格(叫做严格模式,flex builder中默认为这种模式)

判断是哪个类型

instanceof

is – 来判断是否是同一个类型

这个操作符用来代替老版本中的instanceof

as操作符

n/a

类似is操作符,但是返回的不是boolean,而是变量的值

基元数据类型

byte int long short double float boolean char

Boolean String int uint Number

 

它们都是对象

混合类型

n/a

Array Data Error Function RegExp

XML XMLList

数组的声明和实例化

省略

AS3中的数组及其操作类似java的数组列表ArrayList

AS3中拥有复合数组,数组中的元素都是对象,可以使用这些对象中的成员变量的键值对来构成访问这些元素的指针

继承体系中的最上层超类

Object

Object

类型转换的语法(向下转型)

Person p = (Person)myObject;

var p:Person = Person(myObject);

or

var p:Person = myObject as Person;

向上转型

class Xyz extends Abc{}

Abc myObj = new Xyz();

class Xyz extends Abc{}

var myObj:Abc = new Xyz();

无类型的变量

n/a

var myObject:*

var myObject:

省略

基本和JAVA相同,但是,AS的包不仅仅可以包含类,还可以包含单独的方法

类访问级别

拥有public private proected3反而访问控制符,如果都不合适,还可以使用包来进行访问控制

public private protected

 

如果都不满足,类还有一个internal控制符,类似用包来进行访问控制

自定义访问级别

n/a

类是XML的命名空间

控制台输出信息

sysout

只能在DEBUG模式下使用

trace()

导入

省略

就算代码中使用了类的全路径(包名+类名),仍然需要导入这个包

无序键值对

hashtable hashMap

复合数组

可以使用复合数组中元素的某一个成员变量作为访问的指针

自动提升(编译器对代码的一种自动处理)

n/a

编译器会将所有的变量声明移动到代码头,所以你在编码的时候可以到最后在声明你所使用的变量(当然不推荐这么做)

实例化对象

省略

基本一样

私有类

private class myClass{…}

AS3中没有私有类,但是貌似有一种包外类类是私有类

类名和所在的文件名之间的关系

一个文档中可以有多个类声明,但是只有一个类是public的而且这个类必须拥有和文档相同的名称

一个文档中也可以有多个类被声明,但是只有一个类能放在package{},而且这个类必须和文档拥有相同的名称

私有构造方法

支持,用来构建单例模式

目前不支持.私有构造方法不是ECMAScript的标准

需要单例模式的话,请使用(重写)public static getInstance()方法,当外部企图实例化这个对象的时候,会检查时候已经存在这样一个实例

动态的类相关操作(定义一个可以在运行期改变属性和方法的类)

n/a

dynamic class Person{

 var name:String;

}

//动态的添加一个属性或者方法

Person p = new Person();

p.name = “Joe”;

p.age = 25;

p.printMe = function(){

trace(p.name,p.age)

}

Closure方法

n/a 该方法预订在JAVA 7版本中添加

 

抽象类

支持

AS3中没有任何东西类是abstract来限定类中的方法为抽象而强制的不能实现他

方法重写

支持

支持,但是你必须拥有重写的权限

方法/构造函数重载

支持

不支持,但是你可以使用动态参数的特性进行类似重载的方法设定,但是需要自行判断

接口

接口中可以包含方法声明和常量

接口中只能包含方法声明

异常处理

关键字:try catch throw finally throws

不能被捕获的异常

方法中不能自行声明异常,而且不仅仅是对象能抛除异常,基元数据类型也可以抛除异常

 

Flash Player在遇到不能被捕获的异常的时候中止代码

正则表达式

支持

支持

 


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值