数组的特点
数组的长度一旦确定就不能修改 数组元素是连续存储的,即数组需要在内存中开辟一整块连续的存储空间
一维数组初始化
(1)静态初始化:适用于一组数据是“已知”
数组名 = new 元素的类型[]{元素1, 元素2,...};
当声明和静态初始化是在一个语句完成的时,=右边的new 元素的数据类型[]可以省略,直接写{}就可以。
元素的数据类型[] 数组名 = {元素1, 元素2,...};
(2)动态初始化:适用于一组数据是“未知”,或需要通过计算得到,或者通过键盘输入得到
数组名 = new 元素的数据类型[长度];
初始化的目的:
(1)数组元素个数
(2)数组的元素值
静态初始化时,值直接确定
动态初始化时,值是默认值
整数类型:0
小数类型:0.0
boolean类型:false
char类型:\u0000,编码值为0的字符
引用数据类型,例如:String:null
public static void main(String[] args) {
//方式一
int[] scores;
scores = new int[]{89,96,100,75,88,99};
//方式二
int[] scores = new int[]{89,96,100,75,88,99};
//方式三
int[] scores = {89,96,100,75,88,99};
}
二维数组
当同样数据类型的数据,有多组需要一起存储,一起处理时,就需要用二维数组。
1、二维数组的声明 元素的数据类型[][] 数组名; //推荐
元素的数据类型 数组名[][];
元素的数据类型[] 数组名[];
2、二维数组的初始化
(1)静态初始化
数组名 = new 元素的数据类型[][] {{第一行/组的元素列表}, {第二行/第二组的元素列表},...};
(2)动态初始化
A:规则的矩阵,每一行的列数相同的
数组名 = new 元素的数据类型[总行数][每一行的总列数];
B:不规则的二维表(每一行的列数不相同,即每一行有长有短)
①先确定行数
//每一行的列数暂不指定,未定,待定
数组名 = new 元素的数据类型[总行数][];
②再依次确定每一行的列数
3、使用
(1)如何获取总行数: 二维数组名.length
(2)如何获取一行: 二维数组名[行下标]
行下标的范围[0, 二维数组名.length-1]
(3)获取一行的元素个数:二维数组名[行下标].length ==> 二维数组名[行下标]本质上是一个一维数组
(4)获取某一行某个元素: 二维数组名[行下标][列下标]
列下标的范围[0, 二维数组名[行下标].length-1]
//静态初始化
int[][] grades = {
{89,78,86,96,99},
{89,87,56,99},
{80,84,56,99,100,12}
};
//动态初始化
int[][] arr = new int[10][6];
//不规则
int[][] arr = new int[5][];//二维数组一共有5行,但是每一行几个元素未定
//arr[i]代表一行,一行又是一个一维数组
/*
发生了空指针异常NullPointerException,
当发生空指针异常时,先找.前面的东西,看它是否为null,
这里arr[i]是null,所以会发生空指针异常
如果要解决空指针异常,必须给arr[i]赋值。
因为arr[i]是代表一行,代表一个一维数组,所以必须给他new一个一维数组
arr[i] = new int[下标为i行的长度,元素个数];