数组初始化过程以及内存理解

xiaoxiao2021-02-28  137

数组定义:可以存储多个元素的容器,这多个元素的数据类型(可以是基本类型,也可以是引用类型)要一致。 初始化定义:为数组开辟控件,并为每个数组元素赋值。 数组初始化有两种方式: (1)静态初始化:初始化时指定数组长度,由系统为数组分配初始值。比如 : int[] array = new int[]{1,20,6,8}; 简化写法: int[] array = {1,20,6,8}; (2)动态初始化:初始化时只指定数组长度,由系统为数组分配初始值。比如 int[] array = new int[4]; 这里面的new 就是为数组分配内存空间。 Java程序为了提高程序的效率,就对数据进行了不同空间的分配,具体是划分为如下五个内存空间: (1)栈内存:存放的是局部变量。 (2)堆内存:存放的是所有new出来的东西。 (3)方法区: (4)本地方法区:存放和系统相关的方法。 (5)寄存器:提供给CUP使用的。 栈内存特点:局部变量使用完就会释放,比如: { int x = 100; ******* } 这个花括号走完这个x就会被释放掉。 堆内存特点: (1)每个new出来的东西都有地址值。(所以我们输出东西的时候,有时候输出的方式不对,却输出了地址值) (2)每个变量都有默认值: byte、short、int、long 默认值是0; float、double 默认值是0.0; char 默认值是'\u0000'(其实就是空字符串); 引用类型 默认值是null; (3)使用完毕就会变成垃圾,但是并没有立即回收。会在拦击回收期空间的时候回收。 你new出来的东西其实会同时在栈内存和堆内存中,比如: int[] array = new int[6]; 首先这个array是一个局部变量,他会在栈内存中开辟空间,然后这个空间中存放了一个地址值,这个地址值指向的是 堆内存中new 出来的地址(分配的空间),然后如果想使用这个局部变量的数据,会跟着地址去找。

方法区:方法区里面有一部分区域是加载class文件,这个要跟对象结合起来理解,java文件跑起来会先编译成class文件, 然后方法区里面加载class文件,在堆里面new 对象的时候,会先去这个区域看是否存在这个对象的class文件, 存在才会开辟对象区域。拿到class里面的成员变量和方法,而这些方法会在栈内存中被调用,调用完之后就会 释放掉。

转载请注明原文地址: https://www.6miu.com/read-38171.html

最新回复(0)