1 数组的基本定义
所有项目开发之中一定会存在有数组的使用。
数组的本质是指一组相关变量的集合。在Java里面数组是引用数据类型。数组的定义格式:
(1)数组动态初始化:初始化之后的数组每一个元素的保存内容为其对应数据类型的默认值;
|——声明并初始化数组:
|————数据类型 数组名称[] = new 数据类型[长度];
|————数据类型 [] 数组名称 = new 数据类型[长度]。
(2)数组静态初始化:在数组定义的时候就为其设置好了里面的内容。
|——简化格式:数据类型 数组名称[] = {数据1, 数据2, … };
|——完整格式(建议使用):数据类型 数组名称[] = new 数据类型[]{数据1, 数据2, … };
数组创建之后可以使用脚标按如下方式访问:
(1)数组里面可以通过脚标访问每一个元素,角标从0开始。脚标合法范围为"0~数组长度-1",如果使用的脚标超出合法范围,则会出现”ArrayIndexOutOfBoundsException“(数组越界)异常。
(2)使用数组是为了其可以方便的变量管理,所以经常使用循环来操作数组。
(3)对于数组长度也可以使用”数组名称.length“属性进行获得。
在以后项目开发中,最常见到的数组使用形式:进行数组的循环处理。
public class JavaDemo{
public static void main(String[] args){
//数组定义方式一
int [] arr; //声明一个数组,默认值为null
arr = new int[3];//实例化数组,此时arr值为地址,arr[0]中的值为默认值0
//数组定义方式二
int[] arrA = new int[3];
//数组定义方式三
int arrB[] = new int[3];
//数组定义方式四
int arrC[] = new int[]{1,2,3};
}
}
2 数组引用传递分析
3 foreach输出
JDK1.5之后,为了减轻下标对程序的影响,参考.NET增加了一个增强型的for循环(foreach)。
最大的特点在于可以自动将数组中的每一个元素的内容取出保存在变量里面,这样就可以直接通过变量获取数组内容,而避免下标的方式来获取。
4 二维数组
对于二维数组可以使用的定义语法如下:
- 数组动态初始化:数据类型 数组名称[][] = new 数据类型[行个数][列个数];
- 数组静态初始化:数据类型 数组名称[][] = new 数据类型[][]{{数据, 数据, …},{数据, 数据, …},… };
5 数组与方法
对于引用数据类型而言,主要的特点是可以与方法进行引用传递,而数组本身也属于引用数据类型,也可以通过方法实现引用传递的用法。
既然可以通过方法接受一个数组,那么也可以通过方法返回一个数组,只需在返回值类型上做修改。
主方法所在的类往往被称为主类,那么既然是主类肯定不希望涉及到过于复杂的功能。应将复杂的操作封装为工具类。
6 数组排序案例分析
冒泡排序。
在以后进行类设计的时候,如果发现类中没有属性存在的意义,那么定义的方法就没有必要使用普通方法了,因为普通方法需要在有实例化对象产生的情况下才可以调用。
7 数组转置案例分析
8 数组相关类库
Java数组排序:java.util.Arrays.sort(数组);
Java数组拷贝:System.arraycopy(原数组,原数组开始点,目标数组,目标数组开始点,拷贝长度);
9 方法可变参数
定义一个方法,这个方法可以实现任意多个整型数据的相加处理。从JDK1.5开始,为了方便开发者进行可变参数的定义,对于方法的参数提供有新的支持。
可变参数的最大作用在于,在以后进行一些程序类设计或者开发者调用的时候,利用此种形式就可以避免数组传递操作,可变参数的本质依然是数组。
定义方式:数据类型名 … 标识符
public class JavaDemo{
public static void main(String[] args){
printInfo("lks","love","hhy");
}
static void printInfo(String ... str){
for(String temp:str){
System.out.println(temp);
}
}
}
10 对象数组
类定义的数组类型就称为对象数组。对象数组的定义格式如下:
- 动态初始化:类 对象数组名称[] = new 类[长度]; 每一个元素内容的默认值是null。
- 静态初始化:类 对象数组名称[] = new 类[]{实例化对象, 实例化对象,…};
所有的开发都离不开对象数组,但是通过一系列的分析也应该知道一个数组中的最大缺陷:长度是固定的。优势:数据线性保存,根据索引访问,速度较快(时间复杂度是1)。