您的位置:首页 > 职场人生

黑马程序员--Java基础学习第四天

2012-03-23 00:29 363 查看
---------------------- android培训、java培训、期待与您交流! ----------------------

一、数组的定义

数组(array)是具有相同数据类型的元素的有序集合,数组的元素个数成为数组长度。

元素在数组中的位置称为元素的下标,采用一个下标唯一确定一个元素的数组称为一维数组,采用两个下标唯一确定一个元素的数组称为二维数组。一个一维数组占用一块内存空间,每个元素连续存储,即每个元素的存储单元地址是连续的。

Java的数组是引用数据类型,一个数组变量采用引用方式保存多个数组元素;数组元素的数据类型既可以是基本数据类型,也可以是引用数据类型,对数组元素所能进行的操作,取决于数组元素所属的数据类型。

Java的数组都是动态数组,在声明数组变量之后,使用new运算符申请数组的存储空间。

二、一维数组

1、声明一维数组

type arrayName[]或type[] arrayName。

2、使用new为数组分配空间(动态初始化)

arrayName = new type[arraySize]。

3、数组长度length

Java语言为数组变量提供length属性表示数组占用的存储单元个数。

arrayName.length

4、数组元素表示

一维数组的一个元素由一个下标唯一确定:

arrayName[index]

5、数组声明时赋初值(静态初始化)

如:int[] a=new int{1,2,3,4,5}

或int[] a={1,2,3,4,5}

6、数组元素的初始化(默认初始化)

Java对所有使用new运算符动态分配的存储单元都进行初始化,变量根据所属的数据类型获得相应初值。

数据类型

初始值

数据类型

初始值

byte、short、int、long

0

char

‘\u0000’

float

0.0f

Boolean

false

double

0.0

引用数据类型

null

7、复制数组

Java的System类提供复制数组的arrayCopy()方法,该方法声明如下:

public static void arrayCopy(Object src,int srcPos,Object dest,int destPos,int length)

三、二维数组

1、声明二维数组

2、不规则的二维数组

四、总结

1、数组不是集合,它只能保存同种类型的多个原始类型或者对象的引用。数组保存的仅仅是对象的引用,而不是对象本身。

2、数组本身就是对象,Java中对象是在堆中的,因此数组无论保存原始类型还是其他对象类型,数组对象本身是在堆中的。

3、数组声明的两种形式:一、int[] arr; 二、int arr[]; 推荐使用前者,这符合Sun的命名规范,而且容易了解到关键点,这是一个int数组对象,而不是一个int原始类型。

4、在数组声明中包含数组长度永远是不合法的!如:int[5] arr; 。因为,声明的时候并没有实例化任何对象,只有在实例化数组对象时,JVM才分配空间,这时才与长度有关。

5、在数组构造的时候必须指定长度,因为JVM要知道需要在堆上分配多少空间。反例:int[] arr = new int[];

6、多维数组的声明。int[][][] arr; 是三维int型数组。

7、一维数组的构造。形如:String[] sa = new String[5]; 或者分成两句:String[] sa; sa = new String[5];

8、原始类型数组元素的默认值。对于原始类型数组,在用new构造完成而没有初始化时,JVM自动对其进行初始化。默认值:byte、short、 int、long--0 float--0.0f double--0.0 boolean--false char--'"u0000'。(无论该数组是成员变量还是局部变量)

9、对象类型数组中的引用被默认初始化为null。如:Car[] myCar = new Car[10]; 相当于从myCar[0]到myCar[9]都这样被自动初始化为myCar[i] = null;

10、对象类型的数组虽然被默认初始化了,但是并没有调用其构造函数。也就是说:Car[] myCar = new Car[10];只创建了一个myCar数组对象!并没有创建Car对象的任何实例!

11、多维数组的构造。float[][] ratings = new float[9][]; 第一维的长度必须给出,其余的可以不写,因为JVM只需要知道赋给变量ratings的对象的长度。

12、数组索引的范围。数组中各个元素的索引是从0开始的,到length-1。每个数组对象都有一个length属性,它保存了该数组对象的长度。(注意和String对象的length()方法区分开来,这两者没有统一起来是很遗憾的。)

13、Java有数组下标检查,当访问超出索引范围时,将产生ArrayIndexOutOfBoundsException运行时异常。注意,这种下标检查不是在编译时刻进行的,而是在运行时!也就是说int[] arr = new int[10]; arr[100] = 100; 这么明显的错误可以通过编译,但在运行时抛出!Java的数组下标检查是需要额外开销的,但是出于安全的权衡还是值得的,因为很多语言在使用数组时是不安全的,可以任意访问自身内存块外的数组,编译运行都不会报错,产生难以预料的后果!

---------------------- android培训、java培训、期待与您交流! ----------------------
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: