Java的数组

数组

数组概述

定义

数组就是一个容器:存放相同类型数据的有序集合
所谓数组 ( array ) ,就是相同数据类型的元素按一定顺序排列的集合,就是把有限个类型相同的变量用一个名字命名,以便统一管理
他们,然后用编号区分他们,这个名字称为数组名,编号称为下标或索引 ( index ) 。组成数组的各个变量称为数组的元素 ( element )
。数组中元素的个数称为数组的长度 ( length )。

数组的特点
  • 组的长度一旦确定不能修改。

  • 创建数组的时候会在内存中开辟一块连续的空间。

  • 存取元素的速度快,因为可以通过 [下标] ,直接定位到任意一个元素

格式
数据类型[ ] 变量名; //建议使用这种
数据类型 变量名[ ]; //此时的数组是没有初始值的(实际上数组是默认有初始值的)
数组初始化、

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

动态初始化

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

格式: 数据类型[ ] 变量名 = new 数据类型[元素个数] ;

int[ ] arr = new int[3];

这里数组的长度就是数组元素的个数, 数组名.length:表示数组的长度,数组的最大索引值为 数组名.length-1

静态初始化

静态初始化:初始化时指定每个数组元素的初始值,由系统决定数组长度
格式:数据类型[ ] 变量名 = new 数据类型[ ]{元素1,元素2,元
素3,…} ;

int[ ] arr = new int[]{123};

注意:数组的容量是固定,一旦创建,就不能改变

数组的内存

如int[ ] arr = new int[]{1,2,3};

栈stack:局部变量都放在栈里面 arr[0]、arr[1]、arr[2]
堆heap:new 出来的东西都放在堆里面 new int[]{1,2,3}

数组赋值

数组的下标是从0开始的 格式: 数组名[下标] = 值;
arr[0]表示第一个元素 arr[arr.length-1]表示最后一个元素
如:arr[0] = 10;arr[1] = 20

数组取值

数组元素的访问

索引(下标) :每一个存储到数组的元素,都会自动的拥有一个编号,从 0 开始,这个自动编号就称为数组的索引( index
),可以通过数组的索引访问到数组中的元素。索引范围 :[0,数组的长度-1] 。

语法
数组名[索引]
索引访问数组中的元素

数组名[索引]=值,为数组中的元素赋值。
变量名=数组名[索引],获取数组中的元素

数组遍历

数组遍历 :就是将数组中的每个元素分别获取出来
用for循环 下标从0开始,长度是数组名.length arr[index]

public static void main(String[] args) {
// 定义一个数组
int[] arr = {1,2,3,4,5,6,7,8,9,10};
for(int index=0;index<arr.length;index++){
System.out.println(arr[index]);
}
}

数组的内存分配

内存概述

我们编写的程序是存放在硬盘中的,在硬盘中的程序是不会运行的,必须放进内存中才能运行,运行完毕后会清空内存。

Java虚拟机内存划分

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

  • 程序计数器:程序计数器是 CPU 中的寄存器,它包含每一个线程下一条要执行的指令的地址

  • 本地方法栈:当程序中调用了 native 的本地方法时,本地方法执行期间的内存区域

  • 方法区:存储已被虚拟机加载的类信息、常量、静态变量、即时编译器编译后的代码等数据。

  • 堆内存:存储对象(包括数组对象),new 来创建的,都存储在堆内存。

  • 虚拟机栈:用于存储正在执行的每个 Java 方法的局部变量表等。局部变量表存放了编译期可知长度的各种基本数据类型、对象引用,方法执行完,自动释放。

两个数组指向两个不同地址

结论:两个数组值的改变互不影响

两个数组指向同一个地址
arr1[0] = 10;
arr1[1] = 20;
arr1[2] = 30;
int[] arr2 = arr1;

数组容易产生的异常

ArrayIndexOutOfBoundsException索引(下标)越界:访问了数组中不存在的索引对应的元素,造成索引越界问题

NullPointerExceptionnull空指针异常:访问的数组已经不再指向堆内存的数据,造成空指针异常空值,引用数据类型的默认值,表示不指向任何有效对象

public class ArrayDemo {
public static void main(String[] args) {
int[] arr = new int[3];
//System.out.println(arr[3]); 会报
ArrayIndexOutOfBoundsException
//把null赋值给数组
arr = null;
System.out.println(arr[0]); // 会报
NullPointerException
}
}

二维数组

概述

二维数组就是元素为一维数组的数组

动态初始化1

语法格式
数据类型[][] 数组名 = new 数据类型[m][n]
解释
  • m 表示这个二维数组有多少个一维数组。换言之,一共多少行。

  • n 表示每个一维数组中的元素有多少个,换言之,一共有多少个单元格。

  • 二维数组的访问和赋值方式和一维数组类似。

// 二维数组中元素的访问
数据类型 元素名 = 二维数组名[行下标][列下标];
// 二维数组中元素的赋值
二维数组名[行下标][列下标] =;

动态初始化2

语法格式
数据类型[][] 数组名 = new 数据类型[m][];
数组名[行下标] = new 数据类型[n];
解释
  • m 表示这个二维数组有多少个一维数组,每个一维数组的元
    素的默认初始化值是 null 。

  • n 表示给对一维数组进行初始化。

静态初始化

语法
数据类型[][] 数组名 = new int[][]{{元素1,元素2,...},{元
素1,元素2,...},{元素1,元素2,...},...}

简写

数据类型[][] 数组名 = {{元素1,元素2,...},{元素1,元素
2,...},{元素1,元素2,...},...}

数据类型[][] 数组名 ;
数组名 = new int[][]{{元素1,元素2,...},{元素1,元素
2,...},{元素1,元素2,...},...}

二维数组的名称以及表达方式

二维数组的长度/行数
二维数组名.length
二维数组的某一行
// 行下标的范围是[0,二维数组名.length-1]
二维数组名[行下标]
二维数组的某一行的列数
// 二维数组的每一行是一个一维数组
二维数组名[行下标].length
二维数组的某一个元素
二维数组名[行下标][列下标]

二维数组的遍历

语法
for(int i=0; i<二维数组名.length; i++){
for(int j=0; j<二维数组名[i].length; j++){
System.out.print(二维数组名[i][j]);
}
System.out.println();
}
  • 10
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值