数组
Java内存的分配
- 栈内存:局部变量(在方法定义中的变量都是局部变量)执行程序之前会入栈,执行完成后会弹栈。
- 堆内存:存每一个“new”出来的数据,并分配内存地址以及数据初始化值。使用完会等待JVM垃圾回收去自动回收。每"new"一次都会在栈内存中开辟一个新空间。
- 方法区:加载.class文件先到方法区。
- 其他:本地方法区(储存和系统相关的信息),寄存器(CPU)。
数组的定义
-
数组是一个用来存储相同类型的数据的容器,它可以储存多个变量(元素),但储存的变量的数据类型要一致。
-
数组的定义格式有两种:1. 数据类型[] 数组名;2. 数据类型 数组名[]。(推荐使用第一种方法)
-
数组初始化(上文中的“new“):Java中的数组需要先初始化才能使用。初始化就是分配储存空间。分为静态初始化和动态初始化。
静态初始化:由我们赋值,由系统计算长度。静态初始化的简写方式:int[] a={10,20,30,40}。格式:数据类型[] 数组名 = new 数据类型[]{元素1,元素2,…};
动态初始化:系统分陪储存空间和初始值,我们只需要录入数据。格式:数据类型[] 数组名=new 数据类型[数组长度];
-
数组的定义语法:1.动态定义方式:首先由我们规定数组的长度,系统赋默认值。创建一个数据类型的数组(没有赋值时默认是0)(布尔类型默认是FALSE)。之后向数组中存数据,当我们分配好数组后系统会给分配索引(角标)从零开始,通过索引存数据。取出数组中的元素时也根据索引来取出。未重新赋值时就取默认值。
-
引用数据类型:简单来说,使用new关键字初始化出来的东西就称之为引用数据类型(数组 接口 类)。多个引用可以指向同一个空间。
数组的各种特性
-
数组长度:数组长度就是数组中有多少个元素。最后一个索引(角标)是数组长度减一,即:length-1.
-
数组异常:数组索引越界异常(Array Index Out Of Bounds Exception),就是说在获取或者输入数值时超出数组长度。
空指针异常(Null Pointer Exception):数组的空间没有初始化好,引用不指向任何空间就会出现空指针异常。(人为至空,可以让jvm尽早回收堆内存中new的数据)
-
数组的遍历:就是依次输出数组中的每一个元素。具体操作程序:
for (int i = 0; i < arr.length; i++) {
System.out.print(arr[i]);