数组 — 一种引用数据类型
一、一维数组的定义与使用
1.1 数组初始化
1.1.1 数组动态初始化:
数据类型[ ] 数组名称 = new 数据类型[数组长度];
举个例子:
- 数组通过下标索引来获取元素,即数组名[下标],下标默认从0开始,到长度减一结束
- 数组下标越界会报错(数组越界异常----是一个运行时异常)
- 数组中每个元素都有默认值,默认值是对应数据类型的默认值
- 数组长度的计算方法:数组名.length
访问数组除了上述方法外,在jdk1.5提供了一个for-each语句,也可以用来访问数组:
注意:这种for-each语句仅限于用来访问数组,若要对数组进行修改操作,还是要用常规方法(如:for、while循环)
数组本身除了声明并开辟空间外,还有一种开辟模式(分部进行数组实例化):
注意:数组属于引用数据类型,在使用前必须先初始化,否则会报错
(NullPointException — 空指针异常【属于运行时异常】)
数组开辟空间情况:
数组的引用传递:指多个栈内存指向同一块堆内存。
1.1.2数组静态初始化
- 简化格式:数据类型[ ] 数组名 = {值, 值……};
- 完整格式:数据类型[ ] 数组名 = new 数据类型[ ] {值, 值……};
在数组定义时直接设置内容,根据值的个数确定数组长度,长度不可修改。
匿名数组:没有任何堆内存指向的数组,只能使用一次。
建议:使用静态数组时建议使用完整格式
数组最大缺陷:长度固定,存在越界问题
二、 二维数组的定义与使用(了解)
2.1 二维数组的定义
在之前所使用的数组,使用一个索引就可以访问。这样的数组像一个数据行的概念。
现在通过一个索引就可以取得唯一的一个记录,这样的数组称为一维数组。
而二维数组本质上指的就是一个行列的集合。换言之,如果要获得一个数据,既需要行索引,也需要列索引。
在上述的结构中,如果要确定一个数据,则使用结构为“数组名称[行索引][列索引]”这样的结构就是一个表的结构。
那么对于二维数组的定义有两种声明格式:
2.1.1 动态初始化
- 数据类型[ ][ ] 对象数组 = new 数据类型[行个数][列个数] ;
2.1.2 静态初始化
- 数据类型[][] 对象数组 = new 数据类型[][]{{值,值,…},{值,值,…},…} ;
三、数组与方法的互操作
数组是引用数据类型,所有引用数据类型都可以为其设置多个栈内存指向。所以在进行数组操作的时候,也可以将
其通过方法进行处理。
3.1 方法接收数组
3.2 方法返回数组
3.3 方法修改数组
四、Java对数组的支持
在JavaSE给出的类库中也提供有对数组操作的支持
- 数组排序:Java.util.Array.sort(数组名称);
只要是基本数据类型的数组,sort方法都可以进行排序处理(升序处理)
- 数组拷贝:指的是将一个数组的部分内容替换掉另一个数组的部分内容(必须是连续的)
用法:System.arraycopy(源数组名称,源数组开始点,目标数组名称,目标数组开始点,拷贝长度);
5、对象数组
之前我们看到的数组都是基本类型的数组,对象数组往往是以引用数据类型为主的定义,例如:类、接口。
5.1 对象数组的动态初始化
- 语法: 类名称[ ] 对象数组名称 = new 类名称[长度];
举个例子:
5.2 对象数组的静态初始化
例子如下: