Java中内存图:栈内存、堆内存、方法区。
栈内存:保存的是执行方法、运行方法(例如主方法)。
堆内存:保存的是具体的对象、数组等。
代码中带 **new**的就会在堆内存中开辟空间。
方法区:加载某一个类的.class字节码文件。
在方法区加载编译后的Demo01.class字节码文件
将main方法加载到栈内存中,执行int [ ] arr = ,此时有new,在堆内存中开辟一块空间,创建一个数组(5个连续的空间),数组的索引为0-4。
开辟空间后,数组会生成一个在内存当中的地址值,并把地址值赋值给arr。即可通过此地址值找到对应的内存空间。打印arr就会显示内存的地址值。( [ 代表一维数组,I 代表当前数据类型,@为固定连接符号,后面为十六进制的内存地址值)。
int默认的初始化值为0,此时为数组进行赋值,通过地址值找到这一块空间,通过0索引找到这一块,将默认的初始化值替换即可。
数组名称不再记录任何地址值时,无法操作那一块数组空间。即将数组的引用置为空(NULL)
即 arr = NULL,此时继续访问数组中的元素就会出现错误NullPointerException(空指针异常)