Java SE基础篇(六)

一、什么是数组

数组(array)是一种用于存储多个相同类型数据的存储模型

定义格式

  • 格式一: 数据类型 [ ] 变量名
  • 范例: int [ ] arr
  • 定义了一个int类型的数组,数组名是arr
  • 格式二: 数据类型 变量名 [ ]
  • 范例: int arr[]
  • 定义了一个int类型的变量,变量名是arr数组

推荐使用格式一

二、数组初始化

java中的数组必须先初始化,然后才能使用,所谓初始化是指为数组中的数组元素分配内存空间,并为每个数组元素赋值

①动态初始化

初始化时只指定数组长度,由系统维数组分配初始值

  • 格式:数据类型[ ] 变量名 =new 数据类型[数组长度];
  • 范例: int [ ] arr = new int[3];

②静态初始化

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

  • 格式: 数据类型 [ ] 变量名=new 数据类型[ ]{数据1,数据2,数据3,···};
  • 范例: int[ ] arr=new int [ ]{1,2,3};
  • 简化: 数据类型 [ ] 变量名={数据1,数据2,···};

三、数组元素访问

数组内部保存的数据的访问方式

格式: 数组名[索引]

索引是数组中数据的编号方式,用于访问数据中的数据使用,数组名[索引]。

四、常见数组使用错误

  • 数组索引越界

  • 空指针异常

五、java中的内存分配

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

  • 栈内存:存储局部变量

定义在方法中的变量,例如: arr,使用完毕会立即消失。

  • 堆内存:存储new出来的内容(实体,对象)数组在初始化时,会为存储空间添加默认值
  1. 整数:0
  2. 浮点数:0.0
  3. 布尔:false
  4. 字符:空字符
  5. 引用数据类型:null

每一个new出来的东西都有一个地址值,使用完毕会在垃圾回收空闲时间被回收。

java内存结构

java程序是交由JVM执行的,所以java内存区域实际是指JVM内存区域的划分

JVM内存划分

区域名称 作用
寄存器 供CPU使用
本地方法栈 JVM在使用操作系统功能的时候使用
方法区 存储可以运行的class文件
堆内存 存储对象或者数组,new来创建的,都存在堆内存
方法栈 方法运行时使用的内存,比如main方法运行,进入方法栈中执行。

六、Java程序执行流程

首先java源代码文件(.java)会被java编译器编译为字节码文件(.class),然后由JVM中的类加载器加载各个类的字节码文件,加载完毕后,交由JVM引擎执行。

整个执行过程中,JVM会用一段空间来存储程序执行期间需要用到的数据和相关信息,这段空间即为JVM内存。因此,在Java中我们常说的内存管理就是对这段内存空间的分配和回收。

举个栗子

  • main方法进入方法栈执行;
  • 创建数组,JVM会在堆内存中开辟空间,存储数组;
  • 数组在内存中会有自己的内存地址,以十六进制数表示;
  • 数组中有3个元素,默认值为0
  • JVM将数组的内存地址赋给引用变量arr
  • 变量arr保存的是数组内存中的地址,而不是一个具体数值,因此称为引用数据类型

本文参考内容

【Java千问】你了解Java内存结构么

思维导图

Java EE思维导图

请我喝杯咖啡吧~

支付宝
微信