数组含义:
* 存储同一中数据类型多个元素的固定容器
* 特点:
* 1.数组一旦初始化其长度(大小)是不可以改变的
* 2.在内存中存储的数据必须是同一种数据类型
* 3.数组中的元素必须是多个,可以声明长度为0或1的数组,但是这样的数组没有任何意义
*
* 数组的声明
* 含义:
* 就是将数组进行定义
* 分类:
* 数据类型[] 数组名;(推荐)
* 通过字面描述:int[] arr
* 声明存储int类型元素的数组,数组名为arr
* 数据类型 数组名[];
* 通过字面描述:int arr[]
* 声明存储int类型元素的变量,变量名为arr数组
* 解释:
* 数据类型:数组中元素的数据类型
* []:数组
* 数据类型[]:数组的数据类型
*
* 数组的初始化:
* 含义:
* 将数组在内存中进行创建
* 分类:
* 动态初始化:声明数组时只初始化数组的长度,不初始化数组中具体的存储元素,JVM可以直接获取到数组的长度
*
* 静态初始化:声明数组时不进行数组长度的初始化,只初始化数组中具体的元素,JVM可以间接获取到数组的长度
* 格式:
* 动态初始化:
* 数据类型[] 数组名 = new 数据类型[数组长度];
* 静态初始化:
* 标准版(完整版):
* 数据类型[] 数组名 = new 数据类型[]{元素1,元素2,......,元素n};
* 简化版
* 数据类型[] 数组名 = {元素1,元素2,......,元素n};
* 注意:
* 通过数组静态初始化的简化版创建数组时,JVM会根据数组的数据类型在内存中申请并创建数组,new 数据类型[]由JVM在
* 创建数组时隐式填充
* 解释:
* new:申请并开辟内存空间
数组声明初始化的注意事项:
* 1.数组中的元素支持变量的类型转换,保证内存中是同一种数据类型即可
* 2.数组不可以通过动静结合的方式进行初始化
* 3.数组一旦初始化,其长度不可以改变
* 4.静态初始化的简化版不可以先声明后初始化
* 原因:静态初始化简化版直接声明初始化时,是根据数组名前面的数据类型[]在内存中申请并开辟内存空间,new 数据类型[]由JVM隐式
* 进行提供;静态初始化简化版如果先声明后初始化,在初始化过程中无法直接获取数组名前面的数据类型[],JVM不会隐式提供new 数据类型[]
*
获取和使用数组中元素
*
* 索引值:
* 含义:
* JVM针对数组中元素的动态编号
* 特点:
* 1.索引值从0开始,依次递增,数组中最大的地址值是其长度-1
* 2.长度为0的数组没有索引值
* 格式:
* 数组名[索引值]
* 注意:
* 获取数组中元素的时,不能访问不存在的索引或错误索引,否则会发生索引越界异常(ArrayIndexOutOfBoundsException)
*
JVM中的内存划分
* JDK6.0(包含)以前
* 寄存器(程序计数器):存储和计算机硬件(CPU)相关的内容
* 本地栈内存:存储和操作系统相关的内容
* 本地方法栈:俗称"栈内存",正在运行的方法
* 堆内存:存储隐式和显式new出来的东西
* 方法区:存储字节码文件对象(类文件Class)
* JDK7.0
* 寄存器(程序计数器):存储和计算机硬件(CPU)相关的内容
* 本地栈内存:存储和操作系统相关的内容
* 本地方法栈:俗称"栈内存",正在运行的方法
* 堆内存:存储隐式和显式new出来的东西
* 将方法区划归堆内存中
* JDK8.0(包含)以后
* 寄存器(程序计数器):存储和计算机硬件(CPU)相关的内容
* 本地栈内存:存储和操作系统相关的内容
* 本地方法栈:俗称"栈内存",正在运行的方法
* 堆内存:存储隐式和显式new出来的东西
* 元空间:存储特殊值的空间
*
* 栈内存(本地方法栈)的特点
* 含义:
* JVM中存储"正在运行方法"的内存
* 特点:
* 1.方法中的内容会随着方法的进栈而进栈,会随着方法出栈的消失
* 2.方法的出栈是指在栈内存中立刻消失
* 3.方法进栈和出栈遵循"先进后出,后进先出"原则
*
* 方法区的特点:
* 含义:
* 所应用到的字节码文件对象
* 包含:
* 静态区和常量区
* 特点:
* 方法区内部已有的数据,在二次获取时不会创建新的内容,会拿已有数据进行使用
*
* 堆内存的特点:
* 含义:
* 存储显式或隐式new出来的内容
* 特点:
* 1.堆内存中的每块区域都有独立的地址值
* 2.堆内存中每块区域中的数据都有默认值
* 整数型 0
* 浮点型 0.0
* 字符型 空白字符 '\u0000'
* 布尔型 false
* 引用型 null
* 3.在堆内存中有一个特殊的对象,该区域存储的是"垃圾回收器"
* 作用:
* 垃圾回收器类似于生活中的"扫地机器人",有规则的扫描堆内存,遇到垃圾数据进行回收
* 4.堆内存中每块区域在内存中消失的特点
* 该区域和其它内存区域没有任何的关联性时,该区域会被JVM标记为"垃圾数据",等待垃圾回收器的回收,垃圾回收器扫描到该
* 区域时进行回收
*
数组的应用:
* 基本应用:不会针对数组中元素的索引位置进行任何改动的应用
* 举例:求和,求最值,......
* 高级应用:针对数组中元素的索引位置进行改变
* 举例:反转,排序
* 综合应用:和之前讲解的方法进行综合使用
* 举例:数组的动态扩容,动态删除,动态插入
*
* 需求:
* 按照固定的格式拼接数组的元素
* 举例:
* 固定格式:
* 数组:[元素1, 元素2, ......, 元素n]
*