1 数组:存储一组相同数据类型的 容器
1.1 分类
(1)静态初始化:知道数组内容,不知道长度
int[] arr1=new int[]{12,13,13};
int[] arr2={12,1,2};
地址值:
System.out.println(arr1); //[I@4554617c
[ :当前是数组
I :数组里的元素是int型
@:固定格式的间隔符号
4554617c:真正的地址值
(2)动态初始化:知道数组长度,不知道内容
int[] arr3=new int[3];
1.2 特点
① 存储数据的类型必须一致 -- 保证了元素的安全性 , 存储数据不够灵活
② 使用数组进行多个数据存储时 , 必须标明数组的长度 -- 长度固定
2 异常解读
-
Exception:异常
-
in thread "main":主线程内
-
java.lang...:内部已经写好的异常类,出现异常时会提示当前出现的异常类型
-
:数据:表示异常出现的内容
-
at...:异常出现的位置
3 数组的遍历
int[] x1 = {1, 4, 6, 7};
①写下标,输出数组各个值
for (int i = 0; i < x1.length; i++) {
System.out.print(x1[i]+" "); //1 4 6 7
}
②不用写下标,直接输出数组各个值
System.out.println(Arrays.toString(x1)); //[1,4,6,7]
③不用写下标,直接遍历输出数组各个值
for (int ming:x1){
System.out.print(ming+" "); //1 4 6 7
}
4 二维数组
(1)直接赋值
int[] sum1 = {1,2,3};
int[] sum2 = {1,2,3};
int[] sum3 = {1,2,3};
int[] [] sum={sum1,sum2,sum3};
(2)匿名赋值
int[] [] sum = {sum1,new int[3],new int[]{1,4,6}};
5 直接复制
(1)从头开始复制:Arrays.copyOf(源数组名,新数组长度)
//数据类型[] 新数组名=Arrays.copyOf(源数组名,新数组长度);
//新的长度<=源数组:正常复制
//新的长度>源数组:不足的地方以默认值填补
int[] num1={1,1,1,1,1,1,1};
int[] num2=Arrays.copyOf(num1,num1.length);
System.out.println(Arrays.toString(num2));
int[] num3=Arrays.copyOf(num1,10);
System.out.println(Arrays.toString(num3));
int[] num4 = Arrays.copyOf(num1, 2);
System.out.println(Arrays.toString(num4));
(2)从指定位置开始复制:System.arraycopy(源数组,srcPos,新数组,destPos,复制的长度)
需要考虑数组下标越界的问题
//System.arraycopy(源数组,int srcPos,新数组,int destPos,int length)
//srcPos:从源数组中指定位置开始复制
//destPos:在新数组中指定位置开始复制
//注意数组下标越界问题
int[] num5=new int[10];
System.arraycopy(num1,0,num5,0,3);
System.out.println(Arrays.toString(num5));
6 字节数组:把字节信息转换为字符串
byte[] bytes = {97,98,99,100};
String s = new String(bytes);
System.out.print(s); //abcd
7 字符数组创建字符串
char[] chs = {'a','b','c','d'};
String s = new String(chs);
System.out.print(s); //abcd