一个变量只能存一个数据。
数组是一个容器,可以存储多个数据值。
特点:
1.数组是一种引用类型。
2.数组中的数据,类型必须统一。
3.数组初始化时,需要初始化长度,并且长度不能更改。
数组的初始化:
在内存中创建一个数组,并加入默认值。
1.动态初始化,指定长度。
数据类型[ ] 数组名称 = new 数据类型[数组长度];
String[] arr = new String[10];
2.静态初始化,指定内容。长度可推算出来。
数据类型[] 数组名称 = new 数据类型[]{元素1,元素2,元素3};
3.静态初始化的省略格式。
数据类型[] 数组名称 = {元素1,元素2,元素3};
String[] arr = {"zhangsan","lisi","wangwu"};
int[] arr = new int[]{1,2,3,4,5,6};
数组初始化的标准格式,可以拆成两个步骤。先声明,再初始化。但是静态初始化的省略格式不能拆分成两个步骤。
使用建议:如果不确定数组中的具体内容使用动态初始化,否则用静态初始化。
无论基本类型还是引用类型都可以创建数组。
直接打印数组名称,得到的是数组内存地址的哈希值。这个数组地址是数组第一个值的地址。
访问数组元素:数组名称[索引值]
索引值:就是一个int数字,代表数组中元素的编号,从0开始,一直到数组长度-1为止
Java内存需要划分成5个部分:
1.栈(Stack):存放方法中的局部变量,方法的运行在栈中
局部变量:方法的参数,或方法内部的变量。
作用域:{},一旦超出作用域,立刻从栈内存中消失。
2.堆(Heap):凡是new出来的对象,都存在堆当中。
堆中的东西都有一个地址值:16进制表示的内存地址
堆内存中的数据,都有默认值。规则:
整数 0
浮点数 0.0
字符 ‘\u0000’
布尔 false
引用类型 null
3.方法区(Method Area):存储.class相关信息,包含方法的信息。
4.本地方法栈(Native Method Stack):与操作系统相关
5.寄存器(pc register):与cpu相关
数组的内存图
数组越界异常
空指针异常 int[] arr = null; System.out.println(arr[0])
数组的长度:arr.length 数组一旦创建,程序运行期间,长度不可改变。
数组的遍历:
int[] arr = new int[]{1,3,4,5,6};
for(int i=0;i<arr.length;i++){
System.out.println(arr[i]);
}
当调用方法的时候,数组作为参数,传递进去的是数组的地址值。
方法传入的参数,如果是基本类型,传入的是值,如果是引用类型,传入的是地址值。也有传入的是引用。
方法只能有0或1个返回值,不能有多个。
数组作为方法的返回值,其实返回的也是数组的地址值。也就是数组的引用。