Java 基础 11 数组内存结构及静态初始化

1.1 JVM内存划分

Java 程序在运行时,需要在内存中的分配空间。为了提高运算效率,就对空间进行了不同区域的划分,因为每一片区域都有特定的处理数据方式和内存管理方式。

  存储局部变量

  存储new出来的东西

  • 方法区 (面向对象进阶讲)

  • 本地方法区 (和系统相关)

  • 寄存器 (给CPU使用)

Java 基础 11 数组内存结构及静态初始化_第1张图片
JVM_RAM.png

1.1.2 一个数组的内存图

  定义一个数组,输出数组名及元素。然后给数组中的元素赋值,再次输出数组名及元素。

1.1.2.1 案例代码

package com.itheima_02;
/*
 * 定义一个数组,输出数组名及元素。然后给数组中的元素赋值,再次输出数组名及元素。
 */
public class ArrayTest {
    public static void main(String[] args) {
        //定义一个数组
        int[] arr = new int[3];
        
        //输出数组名及元素
        System.out.println("arr:"+arr);
        System.out.println("arr[0]:"+arr[0]);
        System.out.println("arr[1]:"+arr[1]);
        System.out.println("arr[2]:"+arr[2]);
        System.out.println("--------------");
        
        //然后给数组中的元素赋值
        arr[0] = 100;
        arr[2] = 200;
        
        //再次输出数组名及元素
        System.out.println("arr:"+arr);
        System.out.println("arr[0]:"+arr[0]);
        System.out.println("arr[1]:"+arr[1]);
        System.out.println("arr[2]:"+arr[2]);
    }
}

1.1.2.2 代码内存图解

Java 基础 11 数组内存结构及静态初始化_第2张图片
JVM_RAM2.png

1.1.3二个数组的内存图

  定义两个数组,分别输出数组名及元素。然后分别给数组中的元素赋值,分别再次输出数组名及元素。

1.1.3.1案例代码

package com.itheima_02;
/*
 * 定义两个数组,分别输出数组名及元素。然后分别给数组中的元素赋值,分别再次输出数组名及元素。
 */
public class ArrayTest2 {
    public static void main(String[] args) {
        //定义两个数组
        int[] arr = new int[2];
        int[] arr2 = new int[3];
        
        //分别输出数组名及元素
        System.out.println("arr:"+arr);
        System.out.println("arr[0]:"+arr[0]);
        System.out.println("arr[1]:"+arr[1]);
        System.out.println("--------------");
        
        System.out.println("arr2:"+arr2);
        System.out.println("arr2[0]:"+arr2[0]);
        System.out.println("arr2[1]:"+arr2[1]);
        System.out.println("arr2[2]:"+arr2[2]);
        System.out.println("--------------");
        
        //然后分别给数组中的元素赋值
        arr[1] = 100;
        
        arr2[0] = 200;
        arr2[1] = 300;
        
        //分别再次输出数组名及元素
        System.out.println("arr:"+arr);
        System.out.println("arr[0]:"+arr[0]);
        System.out.println("arr[1]:"+arr[1]);
        System.out.println("--------------");
        
        System.out.println("arr2:"+arr2);
        System.out.println("arr2[0]:"+arr2[0]);
        System.out.println("arr2[1]:"+arr2[1]);
        System.out.println("arr2[2]:"+arr2[2]);
        System.out.println("--------------");
    }
}

1.1.3.2代码内存图解

Java 基础 11 数组内存结构及静态初始化_第3张图片
JVM_RAM3.png

1.1.4 二个数组指向同一个堆内存的内存图

  定义两个数组,先定义一个数组,赋值,输出。然后定义第二个数组的时候把第一个数组的地址赋值给第二个数组。然后给第二个数组赋值,再次输出两个数组的名及元素。

1.1.4.1案例代码四

package com.itheima_02;
/*
 * 定义两个数组,先定义一个数组,赋值,输出。然后定义第二个数组的时候把第一个数组的地址赋值给第二个数组。
 * 然后给第二个数组赋值,再次输出两个数组的名及元素。
 */
public class ArrayTest3 {
    public static void main(String[] args) {
        //先定义一个数组
        int[] arr = new int[3];
        
        //赋值
        arr[0] = 100;
        arr[1] = 200;
        arr[2] = 300;
        
        //输出
        System.out.println("arr:"+arr);
        System.out.println("arr[0]:"+arr[0]);
        System.out.println("arr[1]:"+arr[1]);
        System.out.println("arr[2]:"+arr[2]);
        System.out.println("--------------");
        
        //然后定义第二个数组的时候把第一个数组的地址赋值给第二个数组
        int[] arr2 = arr;
        
        //然后给第二个数组赋值
        arr2[0] = 111;
        arr2[1] = 222;
        arr2[2] = 333;
        
        //再次输出两个数组的名及元素
        System.out.println("arr:"+arr);
        System.out.println("arr[0]:"+arr[0]);
        System.out.println("arr[1]:"+arr[1]);
        System.out.println("arr[2]:"+arr[2]);
        System.out.println("--------------");
        
        System.out.println("arr2:"+arr2);
        System.out.println("arr2[0]:"+arr2[0]);
        System.out.println("arr2[1]:"+arr2[1]);
        System.out.println("arr2[2]:"+arr2[2]);
    }
}

1.1.4.2代码内存图解

Java 基础 11 数组内存结构及静态初始化_第4张图片
JVM_RAM4.png

1.1.5数组初始化之静态初始化

  • 静态初始化:初始化时指定每个数组元素的初始值,由系统决定数组长度。

    • 格式:
      • 数据类型[] 数组名 = new 数据类型[]{元素1,元素2,…};
    • 举例:
      • int[] arr = new int[]{1,2,3};
      • 解释:定义了一个int类型的数组,这个数组中可以存放3个int类型的值,并且值分别是1,2,3。
      • 其实这种写法还有一个简化的写
        int[] arr = {1,2,3};

1.1.5.1案例代码

package com.itheima_03;
/*
 * 静态初始化:给出数组中的元素值,由系统决定数组的长度。
 * 
 * 格式:
 *      数据类型[] 数组名 = new 数据类型[]{元素1,元素2,元素3,...};
 * 
 * 举例:
 *      int[] arr = new int[]{1,2,3};
 * 
 * 简化的格式:
 *      数据类型[] 数组名 = {元素1,元素2,元素3,...};
 * 简化格式的代码:
 *      int[] arr = {1,2,3};
 */
public class ArrayDemo {
    public static void main(String[] args) {
        //定义数组
        int[] arr = {1,2,3};
        
        //输出数组名和元素值
        System.out.println("arr:"+arr);
        System.out.println("arr[0]:"+arr[0]);
        System.out.println("arr[1]:"+arr[1]);
        System.out.println("arr[2]:"+arr[2]);
    }
}

你可能感兴趣的:(Java 基础 11 数组内存结构及静态初始化)