Java-数组

数组概述

数组是存储多个变量(元素)的容器
这多个变量的数据类型要一致

数组定义格式
格式一:

// 数据类型[] 数组名 = new 数据类型[元素个数或数组长度];
int[] arr = new int[5];

格式二:

// 数据类型[]  数组名 = {元素值1,元素值2,元素值3,...};
int[] arr = {20,5,100,30,5}

还有其他格式如下:

int[] arr = new int[]{20,5,100,30,5}
int arr[] = new int[4];

数组元素的访问

数组元素的访问 指的是对数组元素的赋值和取值

访问格式:
  数组名[索引]

  数组中的每个元素都是有编号的这个编号就叫索引,也称作角标或者下标,编号是从0开始的,最大的编号就是数组的 长度-1
比如想给arr数组的第一个元素赋值一个数字100 , 可以使用

 arr[0] = 100; 

想打印arr数组的第一个元素 可以使用

 System.out.println(arr[0]);

数组内存图与数据存储原理

Java中的内存分配

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

  • 栈 存储局部变量
    局部变量是定义在方法中或者语句中的变量
    局部变量使用完毕,立即回收
  • 堆 存储new出来的东西
    • 每一个对象都有首地址值,是一个十六进制的地址
    • 每一个对象内的数据都有默认值
      byte,short,int,long 0
      float,double 0.0
      char ‘\u0000’,一个空格
      boolean false
      引用类型:null
    • 使用完毕后,会被垃圾回收器空闲的时候回收。
  • 其他区域
    方法区 (存放字节码文件,常量等)
    本地方法区(系统使用)
    寄存器(给CPU使用)

数组的内存示意图
在这里插入图片描述

数组遍历

  遍历数组是最常见的操作,即依次访问数组中每个元素。使用数组名.length可以获取数组长度,配合循环可以完成遍历动作。
遍历数组代码如下:

int[] arr = {213,4,2,6,10,8};

for (int i = 0; i < arr.length; i++) {
	System.out.println(arr[i]);
}

for(int a:arr){
	System.out.println(a)
}

数组操作的两个问题
  在使用数组时,因为不当的操作,我们可能会通过编译,但是在运行期间遇到一些程序报错,称为运行时错误。
  数组最常见的两个运行时错误:空指针异常和数组索引越界异常

空指针异常

NullPointerException空指针异常

主要是两种情况:

  • 变量完全没有值
  • 变量有值,但值为null
数组索引越界异常

ArrayIndexOutOfBoundsException 数组索引越界

当数组中不存在该索引却访问该索引时,运行时报错

二维数组

元素仍为数组
  数组可以存储任意类型的数据,但是一个数组只能存储一种数据类型的数据。当数组中存储的元素类型仍然为数组时,该数组称为二维数组。
  好比大盒子套小盒子,真正的元素存在于盒子中的盒子中。

二维数组基本使用

数组创建

第一种方式创建(内外数组均创建并赋值)

// 数据类型[][] 数组名 = {{元素值1,元素值2,...},{元素值1,元素值2,..},...}
int[][] arr = {{1,2},{3,4,5,6},{7,8,9}};

上面的二维数组中定义了三个元素,这三个元素都是数组,分别为{1,2}、{3,4,5,6}、{7,8,9},接下来通过一个图来表示这种情况
在这里插入图片描述
  二维数组定义方式较多,原则是创建多个数组,将多个数组放置到一个数组中。

元素访问

对二维数组中元素的访问也是通过索引的方式
如需找到二维数组中第二个一维数组,具体代码如下:

int[] arr2 = arr[1];  //访问的为二维数组中第2个一维数组
int i = arr2[2];  //访问第2个一维数组中第3个元素
System.out.println(i); //打印结果5

如需找到二维数组中第一个元素数组的第二个元素,具体代码如下:

int j = arr[0][1];  //访问的为二维数组中第1个一维数组的第2个元素
System.out.println(j);	//打印结果为2
二维数组遍历
public class MyTest {
	public static void main(String[] args) {
		// 定义二维数组
		int[][] arr = { { 1, 2, 3 }, { 4, 5, 6 }, { 7, 8, 9 } };
		// 遍历二维数组
		for(int y=0; y<arr.length; y++) {
			for (int x = 0; x < arr[y].length; x++) {
				System.out.print(arr[y][x] + "  ");
			}
			System.out.println();//换行
		}
	}
}
//打印结果为
1  2  3  
4  5  6  
7  8  9  

二维数组其他定义格式

第二种方式(内外数组均创建)

数据类型[][] 数组名 = new 数据类型[M][N];
int[][] arr = new int[3][4];

上面的代码相当于定义了一个3*4的二维数组,即二维数组的长度为3,二维数组中的每个元素又是一个长度为4的数组,如下图所示。
在这里插入图片描述

第三种方式(只创建外数组,了解)

int[][] arr = new int[3][];

内数组中每个元素的长度不确定,如下图所示。
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值