注:数组长度一旦确定后就不能修改
一.
1.Java数组是顺序表的数据结构
- 数组(Array),是多个相同类型数据按一定顺序排列的集合
注: 数组里面的元素可以是任何数据类型,包括基本数据类型和引用数据类型
二. 数组的初始化两种方法:
一般变量的初始化和声明:
int num;//声明
num = 10;//初始化
int id = 1001;//声明 + 初始化
一维数组:
静态初始化:数组的初始化和数组元素的赋值操作同时进行
int[] ids;//声明一个数组,里面的元素必须是int的类型
ids = new int[]{1001,1002,1003,1004}; //数组 是 引用数据类型,赋值必须要new,
string 类型赋值本来也是要有new的,只不过Java内部帮你省了,当然,还是可以加上new的
或者
int[] ids = new int[]{1001,1002,1003,1004};
2.动态初始化:数组的初始化和数组元素的赋值操作分开进行
String[] names = new String[5];
names[0] = "王铭";
names[1] = "王赫";
names[2] = "张学良";
names[3] = "孙居龙";
注:
int[] a ;
a[0] = 0;
a[1] = 1;
以上这样是报错的,数组一定要指定长度的 或者 直接初始化值的
多维数组:
//静态初始化
int[][] arr1 = new int[][]{{1,2,3},{4,5},{6,7,8}};
//动态初始化1
String[][] arr2 = new String[3][2];
//动态初始化2
String[][] arr3 = new String[3][]; //注:第二个[]为空,就是第一维数组里面的元素必须是数组
int[][] arr = new int[3][];
int b = 11;
int[] a = new int[]{1,2,3};
arr[0]; // null
arr[0] = a 或 arr[0] = new int[6] ; //第一维数组里面的元素必须是数组,是整数的话会报错
以下这种情况要熟悉:
float[][] arr1 = new float[4][3];
System.out.println(arr1[0]);//地址值
System.out.println(arr1[0][0]);//0.0
double[][] arr3 = new double[4][];
System.out.println(arr3[1]);//null
System.out.println(arr3[1][0]);//报错
提示:
一维数组:int[] x或者int x [] 写法都可以
二维数组:int[][] y或者int[] y[]或者int y [][] 这三种写法都可以
三. 获取数组的元素 和 长度、遍历数组
1.如何调用数组的指定位置的元素:通过角标的方式调用。
//数组的角标(或索引)从0开始的,到数组的长度-1结束。
2.获取数组的长度。
//属性:length
float[][] arr1 = new float[4][3];
arr1.length ; // 4
arr1[0].length // 3
3.遍历数组
for(int i = 0;i < names.length;i++){
System.out.println(names[i]);
}
二维遍历:
for(int i = 0;i < arr.length;i++){
for(int j = 0;j < arr[i].length;j++){
arr[i][j];
}
}
四. 数组元素的默认初始化值 : 数组动态初始化后,如果不给数组赋值的话,它默认是有值的 (注:和类的属性一样,都是有默认值的,类的属性默认初始化值也是这些)
> 数组元素是整型:0
> 数组元素是浮点型:0.0
> 数组元素是char型:ASCII值为0的值 或 '\u0000',而非'0'
> 数组元素是boolean型:false
> 数组元素是引用数据类型:null
声明多个数组:
int[] array1,array2;
int[] age = new int[5];
for(int i = 0; i<age.length;i++){
System.out.print(age[i]);
}
: 00000
五 . 数组的复制
//数组的复制(区别于数组变量的赋值:arr1 = arr)
String[] arr1 = new String[arr.length];
for(int i = 0;i < arr1.length;i++){
arr1[i] = arr[i];
}
六.数组的常见异常
数组中的常见异常:
- 数组角标越界的异常:ArrayIndexOutOfBoundsExcetion
int[] arr = new int[]{1,2,3,4,5};
- 数组角标越界的异常:ArrayIndexOutOfBoundsExcetion
// for(int i = 0;i <= arr.length;i++){
// System.out.println(arr[i]);
// }
// System.out.println(arr[-2]);
// System.out.println(arr[5]);
-
空指针异常:NullPointerException
空指针异常:NullPointerException
//情况一:
// int[] arr1 = new int[]{1,2,3};
// arr1 = null;
// System.out.println(arr1[0]);//情况二:
// int[][] arr2 = new int[4][];
// System.out.println(arr2[0][0]);//情况三:
String[] arr3 = new String[]{"AA","BB","CC"};
arr3[0] = null;
System.out.println(arr3[0].toString());
-
七. 数组也是严格遵守类型的
注:数组变量 里面,存放的不仅是地址值,还有类型等
int[] arr = new int[4];
float[] arr1 = new float[4];
arr = arr1; //虽然arr 和arr1里面存放的都是内存地址,但是arr和arr1指向的数组类型不同,所以不能赋值
int[] a = new int[]{1,2,3,4};
int [] b = a; //没问题
int c = a; //报错
同理:
Person p1 = new Person();
Person p2 = new Person(); //没毛病
int p3 = p1 ; //报错
int[] arr = new int[4];
int[][] arr1 = new int[4][3];
arr = arr1; //报错,一个一维,另一个二维,类型不同
3.二维数组第一层元素类型必须为数组,其他类型会报错
正确的:
int[] arr = new int[4];
int[][] arr1 = new int[4][3];
arr1[0] = arr;
错误的:
int[] arr = new int[4];
int[][] arr1 = new int[4][3];
arr1[0] = 11;
八.对象数组
class Person {
String name;
int age;
/**
* sex:1 表明是男性
* sex:0 表明是女性
*/
int sex;
public void study(){
System.out.println("studying");
}
public int showAge(){
System.out.println("age:" + age);
return 1111111;
}
public int addAge(int i){
System.out.println(showAge());
age += i;
return age;
}
}
class Persons {
String name;
int age;
/**
* sex:1 表明是男性
* sex:0 表明是女性
*/
int sex;
public void study(){
System.out.println("studying");
}
public int showAge(){
System.out.println("age:" + age);
return 1111111;
}
public int addAge(int i){
System.out.println(showAge());
age += i;
return age;
}
}
Person[] a = new Person[5];
Person p1 = new Person();
Persons p2 = new Persons();
a[0] = p1; //没问题
a[1] = p2; //报错,数组a 里面只能放Person类的实例对象