数组在计算机中的执行原理
数组的执行原理、java程序的执行原理
package cn.ensource.memory;
public class ArrayDemo1 {
public static void main(String[] args) {
// 掌握普通变量、数组在计算机中的执行原理
// java程序在计算机中的执行过程
int a = 20;
System.out.println(a);
int[] arr = new int[]{11, 22, 33};
System.out.println(arr);
System.out.println(arr[1]);
arr[0] = 44;
arr[1] = 55;
arr[2] = 66;
System.out.println(arr[0]);
System.out.println(arr[1]);
System.out.println(arr[2]);
}
}
Java虚拟机要运行程序,必须要对内存进行空间的分配和管理。
JAVA内存分配介绍:
1)方法区:将编译后的字节码文件放到方法区中。
2)栈内存:方法运行时所进入的内存,变量也是在这里。main就是在这里执行的。
3)堆内存:new出来的东西会在这块内存中开辟空间并产生地址。new的数组是放在堆里的。
4)本地方法栈;
5)程序计数器;
运行java程序,主要看JVM中包含的哪几个部分内存区域?
1)方法区
2)栈内存;
3)堆内存;
简单说:int a = 20; int[] arr=new int[3] 这两行代码的执行原理?
a是变量,直接放在栈中,a变量中存储的数据就是20这个值。
new int[3] 是创建一个数组对象,会在堆内存中开辟区域存储3个整数。
arr是变量,在栈中,arr中存储的是数组对象在堆内存中的地址值。
基本类型:存储的是具体的值。
引用变量:存储的是地址。
多个变量指向同一个数组的问题。
package cn.ensource.memory;
public class ArrayDemo2 {
public static void main(String[] args) {
// 目标:认识多个变量指向同一个数组对象的形式,并掌握注意事项
int[] arr1 = {11, 22, 33};
// 把int类型的数组变量arr1赋值给int类型的数组变量arr2
int[] arr2 = arr1; // 赋值的是地址
System.out.println(arr1); // 地址:[I@4eec7777
System.out.println(arr2); // 地址:[I@4eec7777
arr2[1] = 99;
System.out.println(arr1[1]);
}
}
多个变量修改的都是同一个数组对象中的数据。
使用数组常见的问题:
如果某个数组变量存储的地址是null,那么该变量将不再指向任何数组对象。
arr2 = null; //arr2不再指向任何数组对象,去访问数据、访问长度就会出现Bug。
会报空指针异常:NullPointExcepiton。
索引越界异常:
程序运行后,将会抛出ArrayIndexOutOfBoundsException数组越界异常。在数据开发中,数组越界异常是不能出现的,一旦出现就必须修改我们的代码。