堆:
存放new的对象和数组
可以被所有的线程共享,不会存放别的对象引用。
栈:
存放基本变量类型(包含该基本类型的具体数值)
引用对象的变量(会存放这个引用在堆里的具体地址)
方法区:
可以被所有的线程共享
包含了所有的class和static变量

在声明数据后,首先在栈里生成一个int类型叫array的空数组,第二步,创建数组时,array会在堆里生成一个用来存放数组元素的空间,并根据所输入的数字生成相应数量的下标。最后第三步,给数组的元素赋值,就可以根据下标找到所对应的数字,如该元素没有被赋值,则默认为0。
因为给数组赋的大小只有10个,如果在取值时,取超出的下标,就会如下报错:
java.lang.ArrayIndexOutOfBoundsException: (数组下标超出界限)
array:数组 index:下标 out:出 bounds:界限 exception:异常
        //静态初始化
    //数组类型  变量名= 数组    
        int[] a =  {1,2,3,4,5,6,7,};
        System.out.println(a[0]);
       
在静态初始化中,大括号用来表示包含的数组,写了多少个元素,就是多大空间,空间一旦确定,就不可被改变。输出时按照下标从0开始的先后顺序输入对应的下标即可。
  //动态初始化
        int[] nums=new int[10];//声明并创建一个数组
        //给数组的元素赋值
        nums[0] = 1;
        nums[1] = 2;
        nums[2] = 3;
        nums[3] = 4;
        nums[4] = 5;
        nums[5] = 6;
        nums[6] = 7;
        nums[7] = 8;
        nums[8] = 9;
        nums[9] = 10;
?
        System.out.println(nums[9]);
动态初始化可以先声明类型,再创建数组,最后给元素赋值。他的存储空间不会因为数组存储的数据的数量而改变,如果数量不足则默认赋值0;数量超出则报错。但它的存储空间可以任意调节改变。
        //3、默认初始化
        int[] b = new int[8];//声明并创建
        b[0] = 5;//给下标0 赋值5
?
        System.out.println(b[0]);//输出为5
        System.out.println(b[6]);//输出为0
在创建了数组的时候,它就已经被赋值了。而它的默认初始值,我们可以通过重新赋值来改变初始值。如果不赋值的元素,默认值就为0。
原文:https://www.cnblogs.com/jinweichaoyouqu/p/13812345.html