一维数组
数组必须初始化
//1.数组的声明
String []names;
int []scores;
//2.初始化
//第一种:静态初始化:初始化数组与给数组元素赋值同时进行
names = new String[]{
"张三","李四","王五"
};
//第二种:动态初始化:数组的初始化与赋值时分开进行的
scores = new int [4];
//2.如何调用相应的数组元素,通过调用数组的下角标的方式
//下角标从 0 开始,到 n-1结束,其中 n表示数组的长度
scores[0] = 87;
scores[1] = 89;
scores[2] = 98;
//3.数组的长度;通过数组的 length属性
System.out.println(names.length);
//4.如何遍历数组元素
for(int i = 0; i<names.length ; i++){
System.out.println(names[i]);
}
对于byte,short,int,long而言,创建数组之后,默认值为0
对于float,double而言,默认值为0.0
对于char而言,默认值为空,“空格”
对于boolean而言,默认值为false
对于引用类型而言,默认值为null
!数组一旦初始化后,其长度时是不可变的
二维数组
int [][]scores;
String [][] names;
//1.二维数组的初始化
scores = new int[][]{
{1,2,3},{3,4,5},{6}
};//静态初始化
names = new String[6][5];//动态初始化
names = new String [6][];//假设一个班级里有6个组,组之间的人数不确定
names[0] = new String[5];
names[1] = new String[3];
names[2] = new String[4];
names[3] = new String[7];
names[4] = new String[8];
names[5] = new String[5];
//错误的写法
//names = new String[][] ,不给数组初始化
//names = new String[][5] ,前面未指定,后面先初始化了
//2.如何来引用具体的某个元素
int [][] i = new int [3][2];
i[1][0] = 98;
i[2][0] = 100;
//3.数组的长度
//二维数组的长度 . length
System.out.println(i[0].length); //具体的二维数组中的元素的长度
//4.遍历数组
//外层循环控制行数,内层循环控制列数
for(int m = 0; m < scores.length ; m++)
for(int k = 0; k < scores[m].length; k++)
{
System.out.println(scores[m][k]+" ");
}
数组是引用类型
所以即使创建的是int型的数组,默认值也是 null
二维数组中,因为一维数组是引用类型,所以默认值是 null,而二维是int型,所以初始值为 0
数组异常
// 1.数组下标越界的异常
int []i = new int[9];
i [0] = 90;
i[10]= 90;
//即没有这个元素,但是却引用了
// 2.空指针的异常
//第一种
boolean [] b = new boolean[3];
b = null; // 给b赋值 null,改变了b的地址,就找不到 b[0]了
System.out.println(b[0]);
//第二种
String [] str = new String [4];
System.out.println(str[3].toString());
//因为String类型的默认值是 null ,程序找不到地址
//第三种
int[][] j = new int [3][];
j[2][0] = 12;
//因为第二个 [] 没有赋值,所以 j[2][] 的地址还是 null,依然找不到地址