一:数组的概念
数组的本质是相同数据类型的变量的集合,数组的每一个元素可以通过唯一的索引值(下标)来访问。
二:数组的声明
语法:type arrayName [ ] ; 或者 type [ ] arrayName ;
推荐使用第二种方式,[ ]表示数组,其后面跟上数组名更加具有意义。
[ ] 也叫索引运算符,其中可以指定数组的索引值,但在声明时不允许指定数组的大小,即[ ] 中什么也不能添加。
三:数组的创建
数组的创建有三种方式:分为两类,静态初始化和初始化。
1)int [ ] a = { 1,3,5,6,5 }(静态初始化)
2)int [ ] a = new int [ 10 ] (动态初始化,手动给定数组长度,由系统给定初始值)
3)int [ ] a = new int [ ] {1,3,4,2,5} (动态初始化,手动给定初始值,由系统计算数组长度)
无论哪种实例化方式,数组一旦被创建,数组的长度便确定了,不能被更改。
注意:!!! 第一种方法创建数组在运行时会被编译成以下代码
int a[] = new int [5];
a[0]=1;
a[1]=3;
a[2]=5;
a[3]=6;
a[4]=5;
这是因为java虚拟机不支持任何形式的高效率的数组初始化。所以第一种方法并不是在编译时进行创建和初始化的,而是在运行时被创建和初始化的。
数组的初始化:
如:第二种方式创建的数组,其内的数组元素并不是null(空),而是0,对于不同数据类型的数组其默认初始值是不同的。
int byte short long --- 0 double float ------>0.0 char------空格 boolean------ false 注意String数组的默认值为null,因为String 为引用数据类型,其内存的是一个个String对象,同理,Integer Double 等基本数据类型的包装类的数组,其默认值也为空(null)
四:数组的访问和修改
访问语法:arrayName [ indexValue] ; 例如 :a [2] 修改时便是在其后直接赋值如 a[2] = 3;
数组的索引是从0开始的,数组的索引值范围为0---数组长度-1(a.length-1) ,否则会引发ArrayIndexOutOfBoundsException(数组索引越界)异常。
数组元素被存储在一块连续的内存中。
五:数组的遍历
数组的遍历有多种方式,如for循环,for-each循环(java 1.5 添加的),
int [] a={1,3,5,2,6,5};
//传统for循环
for(int i=0;i<a.length;i++){
System.out.print(a[i]+" ");
}
System.out.println();
//增强for循环
for (int i : a) {
System.out.print(i+" ");
}
六:多维数组
1)二维数组 int [ ] [ ] a= new int [5 ] [ 3]
表示实例化了一个5行3列的二维数组
int [ ] [ ] a = { {2,4}, {2,8} ,{3,6}} 初始化了3行2列的数组
2)二维数组的遍历
可以使用双层foreach循环
int [] [] f = { {2,4}, {2,8} ,{3,6}};
for (int[] is : f) {
for (int i : is) {
System.out.print(i+" ");
}
System.out.println();
}
注意::第一层循环出来的是一个int类型的数组。
另外:::除了矩形数组外,还有非矩形数组如:int [ ] [ ] b= { {4,3,4},{3,3,4,5,6,6}}就是一个非矩形数组
注意:使用new关键字初始化非矩形数组时列大小不写,行大小不能省如 int [ ] [ ] a = new int [3] [ ] ;
七:数组的拷贝
int [] a={1,3,5,2,6,5};
int [] acopy=a.clone();
//修改新数组验证是否是新数组
acopy[2]=100;
System.out.println(Arrays.toString(a));
System.out.println(Arrays.toString(acopy));
通过调用数组对象的clone()方法完成数组的copy,该方法实现的是数组的浅复制。
八:数组的类表示
通过数组对象的 getClass().getName() 来获取数组类的名字
int-----[ I float----[ F String----[ Ljava.lang.String 二维int类型的数组------[ [ I