1.数组
-
定义:存储同一种数据类型的多个元素的容器
-
特点:每一个元素都有编号,从0开始,最大编号是长度-1
编号的专业叫法:索引,其实就是每个元素的编号 -
格式:
-
数据类型[] 数组名; //常用这种,第二种在很多语言中已舍弃,java中还保留但很少用
-
数据类型 数组名[];
-
数组的初始化
-
动态初始化
只给长度,系统给出默认值例:int[] arr = new int[3]; //此时系统给出默认值arr[0]=0;arr[1]=0;arr[2]=0;
-
静态初始化 //较常用,方便
给出值,系统决定长度例:
int[] arr = new int[]{1,2,3};
简化后:
int[] arr = {1,2,3}; // ;其实这里隐含了new int[];
//这个数组在堆中开辟空间的同时,系统就给了它初始值,收到赋值为1,2,3时才马上更改 -
动和静不能同时用
例:int [] arr = new int [3]{1,2,3};
因为系统已经给过长度了,你又给,不管你给的是否正确,系统不相信你阿,只认为给的是错的
-
通过数组名访问数据的格式是:数组名[索引]
2.Java的内存分配
- 栈内存的运行速度较快,一旦变量的生命周期结束就释放该变量.
堆内存的实体使用完毕就变成了垃圾,在某个时间被垃圾回收器回收. - 堆内存中存储的都是实体(对象),每个实体都有一个首地址值.
- 图解:
对new的小补充: 以后看到new就代表,为xx分配一个内存空间.
垃圾回收机制小扩展:原来在C++里new的对象用完后,需要程序员手动调用析构函数去清除垃圾,万一忘记清除会导致内存溢出,程序崩溃;java的这个机制实现了垃圾自动清除.
-
把第一个数组的地址值赋给第三个数组(图解):
疑问:那么在堆内存中可以放引用类型吗?√
在day06-1学习过程笔记,二维数组的内存图解中得到了解答.
3.数组操作常见的两个异常:
注:学会自己总结各种异常,以后在控制台方便查看.
4.案例:
- 数组的正序、逆序遍历:
2019-08-16ArrayDemo1.
int[] arr = {89,90,374,3892,9738,983,23,0,30};
printArray(arr);
}
public static void printArray(int[] arr) {
System.out.print("[");
for(int x = 0; x < arr.length; x++) {
if(x == arr.length - 1) {
System.out.println(arr[x]+"]");
}else {
System.out.print(arr[x]+", ");
}
}
public static void reverse2(int[] arr) {
for(int start = 0,end = arr.length-1;start <= end;start++,end--){
//这里当start=5,end=4时,循环停止
int tmp = arr[end];
arr[end] = arr[start];
arr[start] = tmp;
}
}
- 获取数组中的最值:
2019-08-16ArrayDemo2.
部分方法:
public static void getMax(int arr []){
int max = arr[0];
for(int i = 1;i < arr.length;i++){
max = (max > arr[i]) ? max : arr[i];
}
System.out.println(max);
}
- 查找指定元素第一次在数组中出现的索引:
2019-08-16ArrayDemo3.
public static int seek(int [] arr,int value) {
int index = -1;
for(int i = 0;i < arr.length;i++){
if(value == arr[i]){
index = i;
break; //找到第一次出现,就中断
}
}
return index; //在循环和判断外必须要有一个return,
避免死循环和判断为false时没有return值
}