数组的概念
数组是相同类型数据的有序集合。数组描述的是相同类型的若干个数据,按照一定的先后次序排列组合而成。其中,每一个数据称作一个元素,每个元素可以通过一个索引(下标)来访问它们。
数组的基本特点
- 长度是确定的。数组一旦被创建,它的大小就是不可以改变的。
- 其元素必须是相同类型,不允许出现混合类型。元素的类型可以是 java 支持的任意类型
- 数组类型可以是任何数据类型,包括基本类型和引用类型。
- 数组的元素在堆内存中被分配空间,并且是连续分配的
- 使用new 关键字对数组进行 内存的分配。每个元素都会被 jvm 赋予默认值。默认规则:整数:0, 浮点数:0.0, 字符:\u0000, 布尔:false, 引用数据类型:null。
- 数组的元素都是有序号的,序号从0开始,0序的。称作数组的下标、索引、角标
数组的定义
语法有两种:
type arrayName[];
type[] arrayName;
type 为 Java 中的任意数据类型,包括基本数据类型和引用类型, arrayName 为数组名,必须是一个合法的标识符,[ ] 指明该变量是一个数组类型变量。
例如:
//第一种定义数组方式
int[] demoArray;
//第二种定义数组方式
int demoArray[];
注:推荐使用第一种声明方式,因为可以方便看出变量 demoArray 是一个整型数组类型。此时 demoArray 并没有指向具体的一块堆内存,因此它的默认值为null。
注意: Java 在定义数组时并不为数组元素分配内存,因此 [ ] 中无需指定数组元素的个数,即数组长度。而且对于如上定义的一个数组是不能访问它的任何元素的,开发者必须要为它分配内存空间,这时要用到运算符new,其格式如下:
arrayName = new type[arraySize];
其中,arraySize 为数组的长度,type 为数组的类型。如:
int[] demoArray;
//为一个整型数组分配3个int 型整数所占据的内存空间。
demoArray=new int[3];
当然 java 中数组还可以使用静态初始化方式,不使用 new 关键字,详细介绍看下面。
数组的初始化
数组的初始化有两种方式:
- 声明数组的同时进行初始化(静态初始化)
- 声明以后进行初始化(动态初始化)
静态初始化
静态初始化就是在声明的同时就为数组元素分配空间并赋值,如:
//简化方式
int[] intArray = {1, 2, 3, 4};
String[] stringArray = {"zhidao", "baidu", "百度知道"};
//完整方式
int[] intArray2 = new int [] {1, 2, 3, 4};
String[] stringArray2 = new String[]{"zhidao", "baidu", "百度知道"};
可以看到使用静态初始化数组的形式有两种,一种是简化方式,没有使用到 new 关键字。另一种是完整方式,使用 new 关键字,这里要提到一种匿名数组。
匿名数组:
利用完整方式初始化的数组,可以方便使用匿名数组。
匿名数组就是没有名称的数组,本质是一块没有栈内存指向的堆内存。只能使用一次,用完就被 jvm 回收了。
匿名数组使用示例:
public class Test {
public static void main(String[] args) {
int[] arr = init();
for (int i = 0; i < arr.length; i++) {
System.out.print(arr[i] + " ");
}
System.out.println();
}
private static int[] init() {
// init() 方法返回一个匿名数组
return new int[] {1, 2, 3, 4, 5};
}
}
动态初始化
动态初始化是先声明,再对数组的元素进行赋值操作,如:
float[] floatArray = new float[3];
floatArray[0] = 1.0F;
floatArray[1] = 132.63F;
floatArray[2] = 100F;
我们可以看到动态初始化的形式是通过数组下标索引为每个元素进行赋值操作的。
数组的使用
每个数组都有一个 length 属性来指明它的长度,例如 :intArray.length
指明数组 intArray 的长度。
使用示例:
/**
* 写一段代码,要求输入任意5个整数,输出它们的和。
*/
public class Test {
public static void main(String[] args) {
int[] intArray = new int[5];
long total = 0;
int len = intArray.length;
// 给数组元素赋值
System.out.print("请输入" + len + "个整数,以空格为分隔:");
Scanner sc = new Scanner(System.in);
for (int i = 0; i < len; i++) {
intArray[i] = sc.nextInt();
}
// 计算数组元素的和
for (int anIntArray : intArray) {
total += anIntArray;
}
System.out.println("所有数组元素的和为:" + total);
}
}
运行结果:
数组的用途还有很多,像二维数组、不规则数组等,我会在后续的文章中进行介绍,文中有写的不对的还请指出~