As3.0与java数据类型的比较总结
1. 在As3.0中所有的数据类型都是对象,都有自己的方法和属性;
Java中的基本数据类型,其采取和C和C++相同的方法。也就是不用new来创建变量,而是创建一个并非是引用的“自动”变量。这个变量直接存储“值”,因此更加高效。
- As3.0中String类型的字面量可用 "" 或 ''引起来,而java中只能用双引号封闭。
- As3.0在声明变量时要加上var 关键字
例4:
var variableName:variableDataType=data; //variableDataType表示数据的类型
在声明复杂数据类型时使用new关键字
例5:
var obj:object=new object(); //声明了一个object类型的变量obj
而java中基本变量的声明与C是十分相似的,其他类型的变量则使用关键字new来申请空间。
- object数据类型
Object类型是所有As3.0数据类型的基类,其他数据类型都是从object数据类型继承来的
初始化:
例6:
var obj:Object=new Object(); //通过构造函数初始化
还可以使用{ }直接对其赋值
例7:
var obj:Object={name:”lee”,age=18,address=”ningbo”}; 其中{ }是As3.0中的初始化对象运算符
obj.name=”peter”; //改变属性值
obj[“name”]=”tom”; //改变属性值的另一种方法
在java中object是抽象类是不能被初始化和赋值的。
数据类型
|
默认值
|
布尔型(
Boolean
)
|
False
|
整数(
int
)
|
0
|
数字(
Number
)
|
NaN
(Not a Number)
|
对象(
object
)
|
Null
|
字符串(
String
)
|
Null
|
自然数(
uint
)
|
0
|
eg:
const foo:int = 11;
foo=9; //注:常量不能被重新赋值。
对于值类型常量持有的就是值,而引用类型常量持有的是引用,
引用类型,常量只能保证持有的引用不变,并不能保证引用对象自身的状态不发生改变。
eg:
const foo:Array = [1,2]
var b:Array = foo;
b[1]=100;
trace(foo);
结果:1,100
foo = [2,3];//错,常量不能被改变
布尔类型定义:
var a:Boolean = true;
trace(a);
结果:true
Boolean 定义未赋值时AS3中默认为false,但在AS2中默认为undefined
数值类型定义:
int、uint是整形数值,Number处理浮点数。
int 是有符号32位的整形数,数值范围从负的2的31次方到正的2的31次方减1,留一位来标注正负号
uint 是无符号的32位整形数,范围零到2的32次方减1,一般处理和颜色有关的值0xFFFFFF,基本为这样的像素值准备。
Number 是64位浮点值,类似于双精度浮点值double类型,而AS3只有Number
一般浮点数在计算中出现的bug要用Math.round()来修正
字符串类型定义:
var a:String; 未定义默认为null
var a:String = "";
var a:String = new String(); 用包装类来声明,默认为""
var a:String = "abc";
var a:String = new String("abc");
var a:String = 'abc';
var lenght:Number = a.length
/n表示换行,/r表示回车,/t表示制表,/表示转义符,// /' /"此三个字符需要转义
数组类型定义:
var a:Array; 声明了一个数组变量,还没有指向谁,默认为null
var a:Array = []; 声明了一个数组,数组输出空白,不是null了
var a:Array = new Array();声明了一个数组,数组输出空白
var a:Array = [1,2];//1,2
var a:Array = new Array(1,2);
var a:Array = new Array(1);声明一个长度为1的空数组,每个数组元素都为空可用a[0]=1进行赋值。
高级关联数组定义:
关联数组有时候也称为"哈希"或"映射",由键和键值组成。关联数组是键和值对的无序集合。
在as3中引入了名为"字典"的高级关联数组。
字典是 flash.utils 包中 Dictionary 类的实例,使用的键可以为任意数据类型,
但通常为 Object 类的实例。即字典的键不局限于 String 类型的值。
故关联数组的键名分类有以下2种。
1、.键名为字符串:在 as3中有两种创建关联数组的方法。
a).使用 Object 构造函数
Object 类的实例(也称作"通用对象")在功能上等同于关联数组。
通用对象的每个属性名称都用作键,提供对存储的值的访问。
如:
var monitorInfo:Object = {type:"Flat Panel", resolution:"1600 x 1200"};
trace(monitorInfo["type"], monitorInfo["resolution"]);
// 输出:Flat Panel 1600 x 1200
若在声明数组时不需要初始化,则以[] 或者 . 添加值。
如:
var monitorInfo:Object = new Object();
monitorInfo["aspect ratio"] = "16:10";
monitorInfo.colors = "16.7 million";
trace(monitorInfo["aspect ratio"], monitorInfo.colors);
// 输出:16:10 16.7 million
b)用 Array 构造函数,如果将关联数组声明为 Array 类型,则将无法使用对象文本初始化该数组。
var monitorInfo:Array = new Array();
monitorInfo["type"] = "Flat Panel";
monitorInfo["resolution"] = "1600 x 1200";
trace(monitorInfo["type"], monitorInfo["resolution"]);
// 输出: Flat Panel 1600 x 1200
用 Array 构造函数创建关联数组没有什么优势。即使使用 Array 构造函数或 Array 数据类型,也不能将 Array 类的 Array.length 属性或任何方法用于关联数组。 最好将 Array 构造函数用于创建索引数组。
即不赞成用array做字典以及哈希组织数据。
2、键名为对象
用 Dictionary 类创建使用对象而非字符串作为键的关联数组。
如,考虑这样一个应用程序,它可根据 Sprite 对象与特定容器的关联确定 Sprite 对象的位置。
可以使用 Dictionary 对象,将每个 Sprite 对象映射到一个容器。
如下例子:
import flash.display.Sprite;
import flash.utils.Dictionary;
var groupMap:Dictionary = new Dictionary();
// 作为键名的对象
var spr1:Sprite = new Sprite();
var spr2:Sprite = new Sprite();
var spr3:Sprite = new Sprite();
// 用作值的对象
var groupA:Object = new Object();
var groupB:Object = new Object();
// 在字典中创建新的键-值对。
groupMap[spr1] = groupA;
groupMap[spr2] = groupB;
groupMap[spr3] = groupB;
if (groupMap[spr1] == groupA)
{
trace("spr1 is in groupA");
}
if (groupMap[spr2] == groupB)
{
trace("spr2 is in groupB");
}
if (groupMap[spr3] == groupB)
{
trace("spr3 is in groupB");
}
对象及关联数组定义:
var a:Object = new Object();使用构造函数
var a:Object = {};使用大括号对作为new 0bject()函数的语法快捷方式
eg1:
var a:Object = {a:1,b:2};
trace(a.b);
结果:2
eg2:
var aa:Object = {
hello : function():void{
trace('hello');
},
ok : function():String{
return "ok";
}
}
aa.hello();
trace(aa.ok());
结果:hello
ok
eg3:
var aa:Object = {};
aa.a=1;
aa.b = function():int{
return 2;
}
trace(aa.b())
结果:2
eg4:
var a:Object={};
var b:Date = new Date();
var c:String;
if (b.getTime()%2==0) {//注:b.getTime()得到当前unix时间戳
c="名字";
} else {
c="name";
}
a[c]="黑羽";//注:由于c此时为变量,若用a.c="黑羽";的形式。for… in遍历出的键值还是变量本身c
for (var i in a) {
trace('当前属性名' + i + ",当前属性值" + a[i]);
}
结果:当前属性名name,当前属性值黑羽
eg5:
var a:Object = {};
a['web'] = 'www.baidu.com';//数组与对象的通用形式
trace(a.web);
结果:www.baidu.com
Null , NaN ,undefined类型定义
var a:int, b:uint, c:Number; 默认值分别为0 0 NaN(不是一个数)
var d:String, e:Boolean; 默认值分别为null false
var f:Array; 默认值 null
var g:Object; 默认值 null
var h; 未声明类型,默认值undefined
var i:*; 未声明类型 默认值undefined
As2中只要未声明变量都默认为undefined
var a:Number //先声明一个没有初始化的Number变量a
var b:Number = 10
var c:Number = a + b //NaN
var d:Number = b - a //NaN
var e:Number = b * a //NaN
var f:int = b - a //0
var h:uint = b + a //0 将默认值赋给不相同的类型,会自动转换成被赋值类型的默认值var b:Boolean =NaN 值为false
AS3中有许多新的数据类型。其中有些类型是以前没有出现的。AS3中的基本数据类型如下:
简单数据类型:
int
null
Number
String
uint
undefined
Array
Date
Error
Function
RegExp
XML
XMLList
Shape (flash.display.Shape)URLRequest (flash.net.URLRequest)
等等。
注意:
特殊类型Void在AS3中被改成了全小写:void。
“*”可以用来代表所有数据类型。如下:
int和uint是number类型的新扩展,int表示整型(没有小数),unit是无符号整型(不能是十进制,不能是负数)。 使用int型比使用Number能稍微的提升运行效率,而uint型只应该使用在必须的地方,比如颜色值。
*显示对象
AS3有一个新的集合:显示对象。这个集合包含了所有可以在舞台上看到或者可以被添加到显示列表中的对象,包括以前的MovieClip,button和textField对象。AS3的显示对象有:
Bitmap
Loader
MorphShape*
MovieClip
Shape
SimpleButton
Sprite
StaticText*
TextField
Video
AVM1Movie是使用AS1和AS2创建的Movie,AS3创建的Movie需要通过AVM2来播放。因此用AS1和AS2创建的Movie在AVM2中被作为一个显示对象来播放。但是不能和AS合使用。
Bitmaps是位图对象。可以通过BitmapData对象来指定显示效果,也可以通过位图文件来设定。
Loader对象用来加载和显示外部的image和swf影片文件。
MorphShapes是在时间轴上创建的图形。虽然不能通过AS创建,但是可以通过AS来引用和控制。
MovieClips人人都会用
Shapes是从MovieClip中分离出来一个只有graphics对象的图形容器。在shape中可以通过graphics对象使用绘图API绘制各种图形。使用shape代替MovieClip可以减少内存负担。
Sprite是没有时间轴的MovieClip,在AS3使用中,可能会在很多地方使用sprite代替MovieClip,尤其在创建自定义的显示组件时。
StaticText和MorphShapes一样,不能通过AS创建,这是在时间轴上创建的文本对象。
TextField,文本对象。
Video对象,播放flash视频。
*新的import标识
AS3中的import标识和AS2中有一些不同。在AS2中,import被用来代理引用类的长名称,在类中并不是必须的。因此在AS2中,如果你不使用import,你也可以使用类的长名称来引用,例如:
var myPoint:flash.geom.Point = new flash.geom.Point(0,0);
import flash.geom.Point;
var myPoint:flash.geom.Point = new flash.geom.Point(0,0);
1.AS3中的数据类型
AS3中所有的数据都是对象。(Everything is an Object 相对于Java 它是完全面向对象 Java基本数据类型不是继承Object类)
AS3中最核心的类是Object类。所有一切类都继承自Object类。
AS3中的数据类型 分为基本数据类型和复杂数据类型
基本数据类型包括:Boolean ,int,Number,String和unit (注意大小写 与Java不同)
Boolean 默认值false
int 默认值 0 ,32位整数
Number 默认值 NaN,64位浮点数
String 默认值null ,字符串
unit 默认值0 ,一般用于颜色上
复杂数据类型包括:Array,Date,Error,Function,RegExp,XML,XMLList,我们自己定义的类。
2.变量的声明和使用
AS3和Java 一样,变量必须先声明再使用
在AS3中变量声明格式如下:
var 变量名:数据类型;
var 变量名:数据类型 = 值;
Var 是一个关键字,用来声明变量。变量的数据类型写在冒号后面。其次,如果要赋值,数据类型和变量声明的必须一致(与Java相同 静态语言的编译时检查),如果没有赋值,变量会根据自己的类型赋予默认值。
var a; 声明a未指定类型 (untyped)
var b:*; 效果同上
3.值类型和引用类型的区别
值类型等同于基本类型,其余全都是引用类型。
值类型的数据可以不用new关键字来创建,当然也可以用new关键字创建。必须用new关键字创建的一定不是值类型。
例1
var a:int = 3;
var b:int = a;
b = 9;
trace(a); //结果3
trace(b); //结果9
例2
var a:Array = new Array(1,2,3);
var b:Array = a;
b[0] = 100;
trace(a); //结果 100,2,3
trace(b); //结果 100,2,3
例3
var a:Array = new Array(1,2,3);
var b:Array = a;
b = new Array(100,200,300);
b[0] = 10;
trace(a);//结果1 2 3
trace(b);//结果10 200 300
AS3中的引用类型和java中的非基本类型相同
4.基本数据类型
在Java中,值类型并不是以对象形式存在的。值类型的变量,存储的不是引用,而是直接容纳了值,AS3中即使是值类型,也存储的是引用,只不过引用的是特殊对象(不可变对象)
5.使用const声明常量
语法
const foo:int = 45;
foo = 100;//报错
6.详细讲解基本数据类型
布尔型:Boolean
比较AS2和AS3中的区别
//AS2
var b:Boolean;
trace(b); //undefined
trace(b == false); //false
//AS3
var b:Boolean;
trace(b); //false
trace(b == false) ;//true
数字型
int 是有符号32位的整型数
unit 是没有符号的32位整型数
Number 是64位浮点数
能用整数优先使用int和unit。
只处理正整数时,处理颜色时使用unit。
有小数时使用Number。
例
var a:int = 9;
var b:int = a/2;
trace(b);//4
var c:Number = a/2;
trace(c);//4.5
要小心整数数值的边界
var i:unit = 0;
i--;
trace(i); //期望的结果是-1 实际结果是4294967295
字符串String
var stringSample1:String ;
var stringSample2:String = "";
var stringSample3:String = new String();
var stringSample4:String = "abc";
var stringSample5:String = new String("abc");
var stringSample6:String = 'abc';
var stringSample:String = "this is a sample";
var stringLength:String = stringSample.length;
数组:Array
Var a:Array;
Var b:Array = [];
Var c:Array = new Array();
Var d:Array = [1,2,3,4];
Var e:Array = new Array(1,2,3,4);
Var f:Array = new Array(5);
Object
Object的成员有两种:一种是属性,一种是函数
声明一个Object
//1.使用构造方法
var foo:Object = new Object();
//2.使用空的大括号
var bar:Object = {};
//3可以写入属性和方法
var foo1:Object = {id:10,name:"hurry",hello:function(){return "Hello !!!"}};
trace(foo1.name);
trace(foo1.hello());
//4.Object可以动态的添加属性
var student:Object = {};
student.id = 1;
student.name = "hurry";
trace(student.name);
//5.动态添加方法
student.sleep = function() {
trace("I am sleep !!!");
}
student.sleep();
//6使用.或[]访问Object属性
多位数组
var sampleArray1:Array = [ [1, 2, 3 ] , [ 4, 5, 6 ] , [ 7, 8, 9 ] ];
trace(sampleArray1[1]);
trace(sampleArray1[1][2]);
var sampleArray2 = new Array(new Array(1,2,3), new Array(4,5,6), new Array(7,8,9) );
trace(sampleArray2[2][1]);
var sampleArray3:Array = new Array(3);
sampleArray3[0] = [1,2,3];
...
...
7变量的默认值
int 默认值 0 unit 默认值0 Number 默认值 NaN String 默认值null
Boolean 默认值 false Array 默认值 null Object 默认值 null 未声明 默认值 undefined
如果一个Number类型的变量未赋值,则它参与的任何的数学运算的结果都是NaN