Day06-1.数组的概述 、数组的初始化 、数组的内存图示 、数组的异常

一、数组的概述

  1. 概述:用来存储多个相同数据类型的一个容器
  2. 举例:
    有一家公司,公司有50个员工。
    问题1:统计50个员工的总薪资?
    问题2:统计50个员工中的最高薪资,最低薪资?
  3. 原因:
    使用数组想要存储或者操作多个数据,比较简单。
  4. 数组定义:
    数据类型[] 数组名称 = new 数据类型[元素的个数];
  5. 说明:
    (1)数据类型:表示数组存储的元素的数据类型
    (2)[]:表示一个一维数组
    (3)数组名称:小驼峰命名法 合法的标识符即可
    (4)=:赋值符号
    (5)new:表示一个关键字。在堆内存中个数组创建空间的关键字
    (6)数据类型:和前面的数据类型保持一致即可
    (7)元素的个数:表示数组中可以存储多少个数据
  6. 打印数组名称的结果:
    [I@15db9742:统称为数组的地址
    [:表示是一个一维数组
    I:表示数组中存储的是一个整数
    @:表示一个普通的分隔符
    15db9742:Java通过哈希算法,计算数组的地址得来的一个十进制的数据,又将十 进制的数据转换为十六进制表示。

代码

class Demo01 {
	public static void main(String[] args) {

		//定义一个数组,用来存储4个人的年龄
		int[] arr = new int[4];
		//打印的结果为数组的地址
		System.out.println(arr);
	}
}

二、数组的初始化

  1. 初始化:表示给数组分配空间并赋值

  2. 数组初始化的分类:
    动态初始化
    静态初始化

  3. 动态初始化:
    数组的定义:
    数据类型[] 数组名称 = new 数据类型[元素的个数];
    数据类型 数组名称[] = new 数据类型[元素的个数];
    数组的赋值:
    数组名称[元素索引] = 元素值;

    元素:数组中存储的数据
    索引:数组中的每一个位置都有一个有序的序号来表示
    范围:0-----元素的个数-1

  4. 注意事项:
    (1)如果数组中的位置没有赋值,会有一个默认值
    整数:0 小数:0.0 字符:’ ’ String:null 布尔:false
    (2)给数组赋值的时候,元素的数据类型,要和定义的类型保持一致

  5. 静态初始化:
    格式:
    元素的数据类型[] 数组名称 = new 数据类型[]{元素值的罗列};
    注意事项:
    (1)静态初始化后面的小括号中不需要跟元素的个数
    (2)将想要存储的数据,直接在大括号中定义即可
    (3)数据之间使用逗号分隔
    (4)元素的类型,要和定义的类型保持一致
    (5)静态初始化有一种简写格式:
    元素的数据类型[] 数组名称= {元素值的罗列};
    注意:简写格式不能分成两行。

代码

class Demo01 {
	public static void main(String[] args) {
		//动态初始化
		int[] arr = new int[4];
		//打印的结果为数组的地址
		System.out.println(arr);
		//给数组的每一个位置赋值
		arr[0] = 10;
		arr[1] = 20;
		arr[2] = 30;
		//arr[3] = 40;
		//获取数组中每一个位置中的元素
		System.out.println(arr[0] + "..." + arr[1] + "..." + arr[2] + "..." + arr[3]);
		
		//静态初始化
		int[] arr2;
		arr2 = new int[]{100,200,300};
		System.out.println(arr2[0] + "..." + arr2[1] + "..." + arr2[2]);
		//静态简写格式:
		int[] arr3 = {1000,2000,3000};
		System.out.println(arr3[0] + "..." + arr3[1] + "..." + arr3[2]);
	}
}

三、数组的内存图示

JVM内存划分

  1. JVM:java虚拟机, 执行java的容器
  2. JVM中有很多区域的划分,不同的区域执行的内容不同,表示的功能也不同
  3. 分类:
    栈内存:执行方法 先进后出,后进先出
    堆内存:用来存储数组,对象等数据量比较大的数据
    方法区:用来存储类的字节码对象 静态数据
    本地方法区:用来执行本地方法,或者存储本地方法所需的一些数据
    程序计数器:控制线程的正常执行

一个数组在内存中的图示

在这里插入图片描述
总结:
(1)数组中的元素在堆内存中存储的
(2)数组中的每一个元素的位置有序存储的
(3)数组的变量中存储的是数组所在空间的地址值

两个数组的内存图示

在这里插入图片描述
总结:
(1)new关键字表示新建数组,遇到一次重新创建一个
(2)创建的两个数组,使用两个变量来存储不同的地址。两个数组之间互不影响

两个引用指向同一个数组内存图

在这里插入图片描述
引用:表示地址(Java语言对地址的一种称呼)
两个引用指向同一个数组:两个变量中存储的地址,是同一个数组的地址
引用数据类型:变量中存储的是元素的地址
注意:
当两个变量中存储的是同一个数组的地址,其中一个变量将数组中的内容进行了修改, 另外一个变量再访问数组的时候,访问的内容是修改之后的。

四、数组的异常

  1. 异常:表示一些不正常的情况。表示一些导致程序出错的问题。
  2. 异常类型1:Exception in thread “main” java.lang.ArrayIndexOutOfBoundsException: 3
    数组索引越界异常:
    (1)原因:访问的索引不在定义的范围内 范围:0—个数-1
    (2)解决的方式:不访问范围外的索引
  3. 异常类型2:Exception in thread “main” java.lang.NullPointerException
    空指针异常:
    指针:表示地址
    (1)原因:当数组的地址值赋值为Null之后,就无法再通过该变量访问数组中的元素
    如果仍然访问,会出现空指针异常。
    (2)解决方式:在访问数组之前,可以通过判断,判断数组的地址是否等于null,如果不等于null,再去访问。
    (3)注意事项:当数组的地址为null,访问数组的变量名,不会出现空指针异常,返回的结果为Null

代码

class Demo04 {
	public static void main(String[] args) {

		int[] arr = new int[3];
		arr[0] = 10;
		arr[1] = 20;
		arr[2] = 30;
		//运行报错:访问了不存在的索引,出现索引越界异常
		//arr[3] = 40;
		System.out.println(arr[0] + "..." + arr[1] + "..." + arr[2]/* + "..." + arr[-1]*/);

		arr = null;
		//返回的地址值为null
		System.out.println(arr);

		if(arr != null){
			//如果数组的地址为Null。仍然访问数组中的元素,出现空指针异常
			System.out.println(arr[0] + "..." + arr[1] + "..." + arr[2]);
		}else{
			System.out.println("数组的地址为空,无法访问元素值");
		}
	}
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值