1.数组
- 数组概念:数组是一种容器,可以同时存放多个数据值。
- 数组特点:1.数组是一种引用数据类型,2.数组中数据的类型必须统一,3.数组的长度在程序运行期间不可改变。
2.数组的初始化
- 动态初始化(指定长度)
数据类型[] 数组名称 = new 数据类型[数组长度];
注意:右侧数据类型必须和左边的数据类型保持一致,可以是基本数据类型,也可以是引用数据类型;数组长度是一个int数字,表示可以保存多少数据。
- 标准化的静态初始化(指定内容)
数据类型[] 数组名称 = new 数据类型[] {元素1, 元素2, ...};
注意:虽然静态初始化没有直接告诉长度,但是根据大括号里的元素具体内容,也可以自动推算出来长度。
-
省略格式的静态初始化
数据类型[] 数组名称 = {元素1, 元素2, ...};
注意:如果不确定数组当中的具体内容,用动态初始化,已经确定了具体的内容,用静态初始化。
3.访问数组元素
- 直接打印数组名称,得到的是数组对应的内存地址哈希值,是一个16进制数;
- 格式:
数组名称[索引值]
- 注意:索引值从0开始,一直到(数组的长度-1)为止。使用动态初始化数组的时候,其中的元素将会自动拥有一个默认值,如果是整数类型,默认为0;如果是浮点类型,默认为0.0;如果是字符类型,默认是'\u0000’;如果是布尔类型,默认是false;如果是引用类型,默认是null。静态初始化也有默认值,只是系统马上将默认值替换为大括号中具体的数值。
4.Java内存划分
- 栈(Stack):存放方法中的局部变量,局部变量是指方法的参数或者方法内部的变量,一旦超出作用域,立刻从栈内存中消失。方法的运行一定要在栈里。
- 堆(Heap):凡是new出来的东西都在堆当中,堆内存里的东西都有一个16进制的地址值,里面的数据都有默认值。
- 方法区(Method Area):存储.class相关信息,包含方法的信息。
- 本地方法栈(Native Method Stack):与操作系统相关。
- 寄存器(pc Register):与CPU相关。
5.数组的内存
6.两个引用指向同一个数组
int[] arrayA = new int[3];
int[] arrayB = arrayA;
7.数组常见异常
- ArrayIndexOutOfBoundsException数组索引越界异常,如果访问数组元素时,索引编号不存在,就会报该异常。原因:索引编号写错了,解决:修改为存在的正确索引编号。
- NullPointerException空指针异常,数组必须进行new初始化才能使用其中的元素,如果只是赋值了一个null,没有进行new创建,就会报该异常。原因:忘了new,解决:补上new。
8.数组长度
获取数组长度:
数组名称.length
注意:数组一旦创建,程序运行期间,长度不可改变。
9.遍历数组
遍历数组的格式:
int len = array.length;
for(int i = 0; i<len; i++){
System.out.println(array[i]);
}
10.数组元素反转
- 数组元素反转其实就是对称位置的元素交换
- 对称位置需要两个索引,int min = 0; int max = array.length - 1;
- 用第三个变量倒手
- 什么时候停止交换?(1)min == max (2)min > max -> 什么时候交换? min < max
for(int min = 0, max = array.length - 1; min < max; min++, max--){
int temp = array[min];
array[min] = array[max];
array[max] = temp;
}
11.数组作为方法参数或方法返回值
- 注意:一个方法可以有0、1、多个参数,但是只能有0或1个返回值,不能有多个返回值。
- 希望一个方法产生多个结果数据进行返回,可以使用数组作为返回类型。
- 任何数据类型都能作为方法的参数类型或者返回值类型。
- 数组作为方法的参数和返回值,传递的都是数组的地址值。