Java内存分析
Java内存
1. 堆
- 存放 new 的对象和数组
- 可以被所有的线程共享,不会存放别的对象引用
2. 栈
- 存放基本变量类型(会包含基本类型的具体数值)
- 引用对象的变量(会存放这个引用在堆里面的具体地址)
3. 方法区
- 可以被所有的线程共享
- 包含了所有的 class 和 static 变量
数组的三种初始化
-
静态初始化
int[] a = {1,2,3}; Man[] men = {new Man(1,1),new Man(2,2)}; //自定义的类数组初始化
-
动态初始化
int[] a = new int[2]; a[0] = 1; a[1] = 2;
-
默认初始化
数组是引用类型,它的元素相当于类的实例变量,因此数组一经分配空间,其中每个元素也被按照实例变量同样的方式被隐式初始化。
package Java数组;
public class Demo02 {
public static void main(String[] args) {
//静态初始化
int[] a = {1,2,3};
System.out.println(a[0]);
//动态初始化
int[] b = new int[2];
b[0] = 4;
System.out.println(b[0]);
//默认初始化
int[] c = new int[2];
System.out.println(c[0]);
}
}
输出结果:
1
4
0
数组的四个基本特点
- 长度是确定的,数组一旦被创建,它的大小就是不可以改变的
- 其元素必须是相同类型,不允许出现混合类型
- 数组中的元素可以是任何数据类型,包括基本类型和引用类型
- 数组变量属于引用类型,数组也可以看出是对象,数组中的每个元素相当于该对象的成员变量
数组本身就是对象,Java 中对象是在堆中的,因此数组无论保持原始类型还是其它对象类型,数组对象本身是在堆中的。
数组边界
下标的合法区间:[0,length-1],如果越界就会报错:
Exception in thread “main” java.lang.ArrayIndexOutOfBoundsException 数组下标越界异常