Java数组在内存中的划分

数组
同一种类型数据的集合,其实就是一个容器。
 
第一种格式(需要一个容器,不明确容器具体数据)
元素类型[] 数组名 = new 元素类型[元素个数或数组长度]
 
int[] arr = new int [3];
 
第二种格式(需要容器,存储已知的具体数据):
 
int[] arr = new int[] {89,34,19};
int[] arr = {89,34,19} ;
 
内存划分:
1.寄存器
2.本地方法区
3.方法区
4.栈内存
    存储的都是局部变量。
    而且变量所属的作用域一旦结束,该变量就自动释放。
    局部代码块,限定局部变量的生命周期。
 
5.堆内存(初始化默认值,栈中不会初始化默认值)
    存储的是数组和对象(其实数组就是对象),凡是new的对象就需要建立在堆中。
    特点:
        1.每一个实体都有首地址值。
        2.堆内存中的每一个变量都有默认初始化值,根据类型的不同而不同。整数0,小数0.0或者0.0f,boolean false,char=‘\u0000’
        3.垃圾回收机制。
 
函数方法需要先进入栈内存中,不然函数中的变量没办法进入栈内存。之后通过new在堆内存中建立三个数组空间,初始化默认值,之后地址赋值给栈内存中的数组变量,由数组变量指向堆内存中的数组空间的地址,可以通过地址+坐标对数组空间的内容进行更改。不用的时候,令数组变量指向null,等待系统的垃圾回收机制将堆内存中的数组空间释放。
 
Java数组在内存中的划分_第1张图片
 
 
 
当访问到数组中不存在角标时,会发生数组下标超出边界异常。int[] arr = new int[3];  输出arr[3]
当引用型变量没有任何实体指向时,还在用其操作实体,就会发生空指针异常。arr = null; 输出arr[3]
这两种情况都是运行时报错,编译不会出错。
 
直接输出数组变量,得到的是内存中数组实体的哈希值。

你可能感兴趣的:(Java)