Java数组
A. 一维数组
1.一维数组的定义和初始化
// int[] id;//数组声明
// 1.静态初始化:数组的初始化和数组元素的赋值操作同时进行
int[] id = new int[] { 1, 2, 3, 4 };
// 2.动态初始化:数组的初始化和数组元素的赋值分开进行
String[] name = new String[4];
name[0] = "dwa";
name[2] = "dwaw";
name[1] = "dawdawf";
name[3] = "sdwfwa";
2.获取数组长度
使用:length后标
System.out.println(name.length);
System.out.println(id.length);
3.遍历数组
for (int i = 0; i < a.length; i++)
System.out.println("321" + a[i] + "das");
4.数组元素的默认初始化值
1.数组元素是整形:0
2.数组元素是浮点型:0.0
3.数组元素是char型:0或'\u000',而非'0'(ASCII码值为0)
4.数组元素是boolean型,false
5.数组元素是引用数据类型时,初始值为null(空值)
5.数组的内存解析
例如:int []a=new int[3];
a在main方法中,为局部变量,a先在栈区中开辟一块空间,new出的结构放在堆里面,是一个长度为3的连续存储的结构(int型默认值为0);堆区的元素有一个用十六进制的数来表示的首地址值,这个地址值附给栈空间中的a;栈区的a通过这个地址值可以找到堆区的数组从而联系起来。当main方法结束后;a从栈区中释放,堆区中的数组也随之从堆区中释放。
B.二维数组
1.二维数组的声明和初始化
二维数组外层的每个元素都相当``于一个一维数组
int[][] arr1=new int[][] {{1,2,3},{4,5},{6,7,8}};
//静态初始化
String[][]arr2=new String[3][2];
//动态初始化
2.二维数组的调用
(1).对内层元素的调用
String[][]arr2=new String[3][2];
System.err.println(arr2[1][1]);
//输出:null
String[][]arr3=new String[3][];
System.err.println(arr3[1][1]);//错误:空指针异常
arr3[1]=new String[4];
System.err.println(arr3[1][1]);//输出null
*外层数组对于的元素相当于一个一维的数组,需要对外层元素再在堆区用new开辟一段内存空间
(2).对外层元素的调用
规定:二维数组分为外层数组的元素和内层数组的元素
外层元素:arr[0],arr[1]等
内层元素:arr[0][0],arr[1][2]等
外层元素相当于一个一维数组(是引用类型),若未给他开辟空间则输出null(引用数据类型初始值为null)例:
int[][]arr3=new int[3][];
System.err.println(arr3[1]);
//输出null
若以给外层元素开辟出空间,则调用结果为一段地址值(开辟出的那块空间的首地址)例:
int[][]arr3=new int[3][];
arr3[1]=new int[4];
System.err.println(arr3[1]);
//输出:[I@548b7f67
3.获取数组的长度
int[][] arr1=new int[][] {{1,2,3},{4,5},{6,7,8}};
System.err.println(arr1.length);//3
//arr1在栈区中,指向外层元素,外层元素有几个arr1的长度就是几
System.err.println(arr1[0].length);//3
System.err.println(arr1[1].length);//2
4.如何遍历二维数组
int[][] arr1=new int[][] {{1,2,3},{4,5},{6,7,8}};
for(int i=0;i<arr1.length;i++)
{for(int j=0;j<arr1[i].length;j++)
{System.out.print(arr1[i][j]);}
System.out.println();}
/*输出: 123
45
678
*/