以int数据类型为例
@Test
public void testNewArray() {
//创建数组
//法一
int[] arr1 = new int[]{1,2,3,4,5};
System.out.println(arr1.length + " " + arr1[2]); //5 3
//Arrays.toString(Object[]) 将数组的元素生成字符串,数组的各个元素使用方括号括着 [ ]
System.out.println(Arrays.toString(arr1)); //[1, 2, 3, 4, 5]
//法二 声明、分配空间并赋值
int[] arr2 = {1,2,3,4};
System.out.println(arr2.length + " " + arr2[2]); //4 3
//法三 声明数组时指定元素个数,然后赋值。此时所有的元素值均为0
int[] arr3 = new int[4];
System.out.println(arr3.length + " " + arr3[3]); //4 0
//法四 声明数组名、开辟空间、赋值
int[] arr4;
arr4 = new int[]{0,1,2,3};
System.out.println(arr4.length + " " + arr4[2]); //4 2
//创建多维数组
int[][] doubleArr1 = {{1,2,3},{4,5,6},{7,8,9}};
int m = 3, n = 4, q = 5;
int[][] doubleArr2 = new int[m][n]; //其中n可以省略
int[][][] tArr = new int[m][n][q]; //其中n、q可以省略
}
注意:
1、一维数组的声明方式:
type[] arrayName; 或 type arrayName[];
推荐使用第一种格式,因为第一种格式具有更好的可读性,表示type[]是一种引用类型(数组)而不是type类型。建议不要使用第二种方式
int[] intArr;
注:Java语言中声明数组时不能指定其长度(数组中元素的个数),这是因为数组是一种引用类型的变量,因此使用它定义一个变量时,仅仅表示定义了一个引用变量(也就是定一个了一个指针),这个引用变量还未指向任何有效的内存,所以定义数组时不能指定数组的长度。而且由于定义数组仅仅只是定一个引用变量,并未指向任何有效的内存空间,所以还没有内存空间来存储数组元素,因此这个数组也不能使用,只有在数组进行初始化后才可以使用。
2、一维数组的创建
Java中使用关键字new创建数组对象,格式为:数组名 = new 数组元素的类型 [数组元素的个数]
// 创建数组,如果在创建的同时不初始化数组则必须指定其大小
intArr = new int[5];
// 创建数组时,不指定数组大小则必须在创建的同时初始化数组
intArray1 = new int[]{0,1,2};
3、一维数组的初始化
数组的初始化分为静态初始化、动态初始化和默认初始化:
//a、数组静态初始化的语法格式:
arrayName = new type[]{element1,element2,element3...};
// 或者使用简化的语法格式:
arrayName = {element1,element2,element3...}
//b、数组动态初始化的语法格式:
arrayName = new type[length];
附:静态初始化时不能指定元素个数,而动态初始化时则必须指定元素个数。静态初始化时数组能够知道元素的个数所以不需要指定,而动态初始化时数组元素个数未知 因此必须指定。
// 静态初始化
int intArray2 [] = new int []{20,21,22};
// 静态初始化简化方式
int intArray3 [] = {30,31,32};
// 动态初始化
int [] intArray4 = new int [3];
// 错误写法:静态初始化不能指定元素个数
// int intErrorArray5[] = new int[3]{50,51,52};
// 错误写法:动态初始化必须指定元素个数
// int intErrorArray6[] = new int[];
注:一维数组这一块记住两点,数组声明的时候是不能指定大小的,也就是说等号左边的中括号中不能包含数字。另外一旦使用new关键字那么肯定在内存中为数组分配了空间,则必然数组有默认值。数组是对象数据类型
注:不要静态初始化和动态初始化同时使用,也就是说不要再进行数组初始化时,既指定数组长度,也为每个数组元素分配初始值。
4、数组进行动态初始化时系统分配初始值的规则
详情见https://blog.csdn.net/qq_44700578/article/details/136323990
为解决以上问题、灵活运用,提出Java容器的概念
参考https://blog.csdn.net/u014199097/article/details/50551731