数组
数组概述
数组是存储多个数据类型一直的变量(元素)的容器
数组既可以存储基本数据类型,也可以存储引用数据类型。
数组的定义格式
第一种:数据类型[] 数组名;
第二种:数据类型 数组名[];
注意:这两种定义做完了,数组中是没有元素值的。
数组的初始化
- 数组初始化概述:
Java中的数组,必须初始化后才能使用
所谓初始化:就是为数组中的数组元素分配内存空间,并为每个数组元素赋值。 - 数组的初始化方式:
分为动态初始化和静态初始化两种
静态初始化:
int[] arr = new int[]{1,2,3,4};
可简化为int[] arr = {1,2,3,4};
含义:创建了一个存放int数据类型的名叫arr的数组,数组中包含元素1,2,3,4
动态初始化就是在创建数组时直接赋初始值,有系统自动计算数组长度
动态初始化:
int[] arr = new int[3];
含义:创建了一个存放int数据类型的名叫arr的数组,数组长度是3
静态初始化就是在创建数组时给定数组长度,有系统自动赋初始值
数组的内存分配
- JVM内存划分
Java 程序在运行时,需要在内存中的分配空间。为了提高运算效率,就对空间进行了不同区域的划分,因为每一片区域都有特定的处理数据方式和内存管理方式。
栈:存放局部变量(定义在方法中的变量,方法一旦执行完,即销毁局部变量)
堆:存放所有new出来的数据,在堆内存中的数据都是有首地址的,并且在堆内存中的数据都是由默认初始值的(byte\short\int\long:0;float\double:0.0;char:’\u0000’;boolean:false;引用数据类型:null),当对内存中的对象使用完时,由垃圾回收器在空闲时将其回收
方法区:存放整个程序中永远唯一的元素,如class,static变量。
本地方法区:和系统相关
寄存器:给CPU使用 - 一个数组的内存图
需求:
定义一个数组,输出数组名及元素。然后给数组中的元素赋值,再次输出数组名及元素
- 两个数组的内存图
需求:
定义两个数组,分别输出数组名及元素。然后分别给数组中的元素赋值,分别再次输出数组名及元素
- 两个数组指向同一个地址的内存图
需求:
定义两个数组,先定义一个数组,赋值,输出。然后定义第二个数组的时候把第一个数组的地址赋值给第二个数组。然后给第二个数组赋值,再次输出两个数组的名及元素
数组的使用
- 数组的元素访问
public void main(String[] args) {
int[] arr = new int[3];
// 这里打印出的是数组在堆内存中的地址值[I@3fa5ac,一般不使用,只有在判断两个数组是否相同时才使用其进行判断,如果需要获得数组中的具体数据,格式为:数组名[索引]---arr[0];这个就是获取数组中第一个值,数组中的编号也就是索引是从0开始到数组长度减1结束;
System.out.println(arr);
}
- 数组中常见的两个问题
A:java.lang.ArrayIndexOutOfBoundsException
数组越界异常
产生的原因:就是你访问了不存在的索引元素。
B:java.lang.NullPointerException
空指针异常
产生的原因:数组已经不指向堆内存的数据了,你还使用数组名去访问元素。
java基础知识1——数据类型
java基础知识2——运算符
java基础知识3——流程控制语句
java基础知识4——数组
java基础知识5——方法
java基础知识6——面向对象
java基础知识7——String&StringBuilder
java基础知识8——ArrayList集合
java基础知识9——IO