一、数组
1、定义
能存储数据的容器,用来存储具有相同数据类型的数据集合,可以使用自定义的名字来引用数组中存储的数据。
2、特点
数组可以存储任何类型的数据,包括基本数据类型和引用数据类型,但是一旦指定了数组的类型之后,就只能用来存储指定类型的数据。
3、数组的使用
语法:
数据类型 [] 数组名
数据类型 数组名[]
//声明一个int类型 numebr的数组
int [] number;
int number [];//以上两种方法都可以
//命名方式有很多种,熟悉那种用哪一种都ok
二、数组的赋值
1、使用new运算符
int [] arr = new [10];
// 意思是把arr 这个数组的长度设置为10,
// 但是数组的长度一旦被设置,就无法更改
2、直接初始化数组
//也可以直接指定数据类型
int [] arr = {1,2,3,4,5,6};
//但是写入必须是相同类型的数据才行
3、数组中存储的数据注意事项
①如果需要访问数组中的元素,需要使用数组名[下标]的形式访问。
②注意数组的最大下标是:数组的长度-1;最开始的下标是0。
③数组的长度可以通过使用数组的属性length获取,每一个数组对象都会有length属性来表示数组的长度,也即数组元素的个数。
System.out.println(number[1]);
//输出number数值第2个数字
4、遍历数组
若要把数组内的所有元素都输出一遍,可以采用for循环的方式,也可以用其他的方式都ok
int [] numebr = {1,2,3,4,5};
for(int i=0;i<number.length;i++){
System.out.println(number[i]);
}
//这里遍历数组中的数据有很多中方法,不只是普通for循环。还有foreach,Iterator迭代器等等。
三、二维数组
二维数组的创建同样有两种方式:
1、使用new运算符
int[] a = new int[8];
//这其实是创建数组,并未初始化,在使用new时,必须显示或者隐示地确定数组的长度,这里是显示确定
int[] a1 = new int[]{1,2,3,4,5,6,7,8};
//这是隐示确定,当然也可以在声明数组后再对数组进行初始化
int[] b;
b = new int[]{1,2,3}; //不可如下初始化数组
int[] c = new int[3];
//c = {1,2,3};
//这是错误的,在eclipse中的错误提示是"Array constants can only be used in initializers",
//即c已经是一个数组常量了,只能在分配空间时对其初始化,要区分c和c[i]
2、声明数组并且赋初始值
int [][] number = {{1,2,3,},{4,5,6,},{7,8}};
//二维数组就是在一个大的数组内,还包含了二级数组,可以理解成嵌套的意思
// 若要输出二维数组,也可以采用多个for循环的方式
int [][] number1 = {{1,2,3},{4,5,6},{7,8,9}};
for(int i =0;i<number1.length;i++){
for (int j = 0;j<number1.length;j++){
System.out.println(number1[i][j]);
}
}
注意:如果是二维数组,在没有完全初始化的情况下,java会忽略未初始化的单元,直接输出下一个单元。
public class ArrayTest {
public static void main(String args[]) {
int[][] a1 = {{1,2},{3,4,5,6}};
for(int i = 0;i < a1.length;i++)
for(int j = 0;j < a1[i].length;j++){
System.out.println(a1[i][j]);
}
System.out.close();
}
}
数组越界属于运行时异常,当数组访问长度超过数组本身长度时,就会抛出数组越界异常
java.lang.ArrayIndexOutOfBoundsException
3、数组指向和传递
引用传递的本质是栈内存中的"字段(集合)"指向堆内存中的数据。
当发生数组的赋值或者数组的函数参数传递时,传递的是值得引用,也就是将指向该数据的指针传递,使得指向同一块数据内存,从而达到数组传递的目的。所以,当堆内存的数据时,其他指向该数据段的引用都会被修改。
四、常见的异常
- 数组下标越界异常:ArrayIndexOutOfBoundsException
- 字符串下标越界异常:StringIndexOutOfBoundsException
- 类转换异常:ClassCastException
- 空指针异常:NullPointerException
- 数字格式化异常:NumberFormatException
- 输入无法匹配异常:InputMismatchException
- 解析异常:ParseException
- 没有这样的元素异常:NoSuchElementException
- 文件找不到异常:FileNotFoundException
- 算术异常:ArithmeticException
- 错误的参数异常:IllegalArgumentException