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

1.1 JVM内存划分

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

  存储局部变量

  存储new出来的东西

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

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

  • 寄存器 (给CPU使用)

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 代码内存图解

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代码内存图解

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代码内存图解

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]);
    }
}

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 1. Java基础部分 基础部分的顺序:基本语法,类相关的语法,内部类的语法,继承相关的语法,异常的语法,线程的语...
    子非鱼_t_阅读 32,060评论 18 399
  • 曾今有过这么一个小小的想法,给我遇到的那些难忘的人写一篇文章,讲讲他们的故事。 这种事想的时间一长就容易放弃,一来...
    3SeaSightSeer阅读 3,604评论 0 0
  • 我立在屋子中间,环顾四周一圈,这间房还是老样子布局罢设一点都没变。 从正门进来右手边是一扇通着堂屋的门,左手边是另...
    夏日莲有梦想阅读 4,138评论 0 5
  • 刚看完了老罗的新机发布会,想聊两方面的内容:说说对“创新”的认识、说说老罗。 一、关于对“创新”的认识 ...
    Spencer手记阅读 3,146评论 2 0