数组定义:可以存储多个元素的容器,这多个元素的数据类型(可以是基本类型,也可以是引用类型)要一致。
初始化定义:为数组开辟控件,并为每个数组元素赋值。
数组初始化有两种方式:
(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里面的成员变量和方法,而这些方法会在栈内存中被调用,调用完之后就会
释放掉。