JAVA内存
-
堆
存放new的对象及数组
可以被别的线程共享,不会存放别等对象引用
-
栈
存放基本数据类型(会包含这个基本类型的具体数值)
引用类型的变量(会存放这个引用在堆里面的具体地址)
-
方法区
可以被所有的线程共享
包含了所有class和static变量
当一个数组被声明时定义该数组基本类型,存放于栈里面
通过new创建数组后,在堆内独立存放数组的长度
// 通俗理解栈就是书名,堆是目录,数组变量是内容
初始化的三种方式
- 静态初始化
// 定义数组时直接给数组赋值
int[] nums = {1,2,3,4,5};
- 动态初始化
// 创建数组后依次给变量赋值
int[] nums = new int[1];
nums[0] = 1;
- 数组的默认初始化
除了八大基本类型,其余都是引用类型,数组的元素相当于类的实例变量,所以数组一经分配空间,其中的元素也被按照实例变量的方式隐式赋值,例:String的值为null,那么int的值为0;
数组的四个基本特点
- 数组的长度是确定的数组一旦被创建,它的大小长度是不可以改变的
- 元素必须是相同类型,不允许出现混合类型
- 数组的元素可以是任何数据类型,包括基本类型和引用类型
- 数组变量属于引用类型,数组也可以看作是对象,数组中的每个元素相当于该对象的成员变量,数组本身就是对象,无论保存原始类型还是其他对象类型,数组对象本身是在堆中的
数组边界
- 下标的合法区间:[0,length-1],超出数组大小就会报错:
ArrayIndexOutOfBoundsException:数组下标越界异常