简单了解java中的数组(二)存储原理、异常操作、遍历

本文详细介绍了Java中数组的存储原理,包括内存、JVM内存划分以及数组在堆内存中的存储方式。还探讨了数组的常见操作,如数组越界异常和空指针异常,并通过实例展示了数组的遍历方法。最后,文章提供了获取数组最大值的示例代码,强调了遍历在数组操作中的重要性。
摘要由CSDN通过智能技术生成

六、数组存储原理

内存

  在讲解数组的存储原理之前,我们需要先来了解一下什么是内存。这样会让我们更好的理解数组的存储原理。
  内存: 计算机中很重要的一个元件,是一个临时的存储区域。当程序运行时,我们编写的代码文件虽然存放在硬盘中,硬盘当中的程序文件不会运行,系统会把程序存放进内存当中,当程序运行完毕之后程序会清空内存。这也是为什么当我们开了较多的程序或者软件时,电脑会变得很卡的原因之一。

java虚拟机中的内存划分

  我们都知道java程序是在java虚拟机(JVM)中运行的,为了提高运行效率,就对内存空间进行不同区域的划分,每一片区域都有特定的处理数据方式和内存管理方式。

JVM内存划分
区域名称作用
寄存器给cpu使用,我们目前不需要任何了解
本地方法栈JVM在使用操作系统功能时使用的,我们目前也不需要了解
方法区存储可以运行的class文件,同时这里也存储着常量池和静态域
方法栈(stack)方法运行时使用的内存,比如说main方法运行,进入方法栈当中运行
堆内存(heap)存储对象或者是数组,new出来的对象,统统存储在堆内存中
一个数组的内存存储

首先我们先定义一个数组

public static void main(String[] args){
    int[] arr = new int[3];
    System.out.println(arr);//内存地址哈希值
}

我们运行上面这段代码会得到这样的结果
在这里插入图片描述

会出现这样的结果是和数组的存储原理有关。存储的并不是具体的数值,而是数据在内存中的哈希地址值
数组内存图解
程序的执行流程:

  1. main方法进入方法栈中执行
  2. 创建数组JVM会在堆内存当中开辟空间,存储数组
  3. 数组在内存当中会有自己的内存地址,以十六进制表示
  4. 数组当中有三个元素,默认值为0
  5. JVM会将数组的内存元地址赋值给引用类型变量arr
  6. 变量arr保存的是数组在内存当中的地址,而不是一个具体的数值

七、数组的常见操作

数组的越界异常操作
public static void main(String[] args){
  //动态初始化一个数组
  int[] arr = new int [5];
  System.out.println(arr[5]);
}

  数组索引是从0开始,最大索引值是arr.length-1,数组索引的区间为[0,arr.length-1]。如果访问数组元素时,索引值不在该区间中,程序就会抛出数组索引越界异常。
越界异常效果图

数组空指针异常操作
public static void main(String[] args){
   //动态初始化一个数组
   int[] arr = new int[3];
   arr = null;
   //查看arr数组的第三个元素
   System.out.println(arr[3]);
}

  数组空指针异常,就是在程序运行过程中,有一个在内存当中不存在的一个变量被引用到了
空指针异常效果图

八、数组遍历【重点】

数组遍历: 就是将数组中的每个元素分别取出来,这就是遍历。遍历是我们操作数组的核心和重点内容。

public static void main(String[] args){
 //静态初始化数组
 int[] arr = {1,2,3,4};
 //数组遍历
 System.out.println(arr[0]);
 System.out.println(arr[1]);
 System.out.println(arr[2]);
 System.out.println(arr[3]);
}

上述代码就是数组的遍历,但是如果数组的长度很大。我们不可能会去一个一个打印,那样做不现实也太蠢了。我们知道数组的索引是从0开始,依次递增的,直到arr.length-1为止,我们是否能引入循环来完成数组的遍历呢?

public static void main(String[] args){
   //静态初始化数组
   int []arr={1,2,3,4};
   //数组遍历 for或者while
   for(int i=0;i<=arr.length-1;i++){
        System.out.println(arr[i]);
    }
}

数组遍历效果图
获取数组当中的最大值
思路:

  1. 定义一个最大值变量,保存数组当中的第一个元素(数组当中索引值为0)
  2. 遍历数组,获取数组当中所有的元素
  3. 将遍历到的元素和保存的最大值变量进行比较
  4. 如果数组元素的值大于最大值变量,那么就把数组元素赋值给最大值变量
  5. 数组循环遍历结束,最大值变量保存的就是数组当中的最大值
public static void main(String[] args){
   //静态初始化一个数组
  int[] arr= {3000,200,1000,10000,5000};
  //定义一个最大值变量
  int max = arr[0];
  for(int i = 1; i<=arr.length-1 ;i++){
   if(arr[i]>max){
   //如果数组元素的元素大于最大值变量,就把数组元素赋值给最大值变量
   max = arr[i];
}
}
  //数组遍历结束,最大值变量保存的就是数组当中的最大值
  System.out.println("数组的最大值为:" + max);
}

数组最大值演示图

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值