数组原理和内存图解
2021-03-17 18:26
标签:jvm 重点 个数 inter table 关系 越界 public com 数组原理和内存图解 标签:jvm 重点 个数 inter table 关系 越界 public com 原文地址:https://blog.51cto.com/14954368/2550084? 内存
? 内存是计算机中一个很重要的原件,临时存储区域,作用是当程序运行过中,
我们编写的程序文件存放在硬盘当中,硬盘当中的程序文件不会运行,存放
到内存当中,当程序运行完毕后程序会清空内存。
? Java虚拟机当中的内存划分
? 为了提高效率,就对内存空间进行不同区域的划分,每一篇区域都有特定的处理数据方式和内存管理方式
区域名称
作用
寄存器
给cpu使用,和我们开法没有关系
本地方法栈
JVM在使用操作系统功能使用的,和我们的开发没有关系
方法区
存储可以运行的class文件(常量池,静态域)
方法栈(stack)
方法运行时使用的内存,比如说main方法运行,进行方法栈当中运行,(局部变量)
堆内存(heap)
存储对象或者数组,new出来的对象,都存储在堆内存当中
数组在内存当中的存储
? 一个数组的内存存储
public static void main(String[]args){
int [] arr=new int [3];
System.out.println(arr);
}
}
程序的执行流程:
main方法进入方法栈中执行
创建数组,JVM会在堆内存当中开辟空间,存储数组
数组在内存当中会有自己的内存地址,以16进制表示
数组当中有三个元素,默认值为0
JVM将数组的内存地址赋值给引用类型变量arr
变量arr保存的数组时在内存当中的地址,而不是一个具体的数值。
? 两个数组的内存分析图解
public static void main(String[]args){
int [] arr =new int [3];
int [] arr2 =new int [2];
System.out.println(arr);
System.out.println(arr2);
}
}
两个变量同时指向同一个数组public static void main(String[]args){
//定义一个数组,动态初始化
int [] arr =new int [3];
//通过索引访问数组当中的元素
arr[0]=10;
arr[1]=10;
arr[2]=10;
//查看元素
System.out.println(arr[1]);//10
//定义一个数组,将上一个数组赋值该数组
int [] arr2=arr;
arr2[1] =50;
//查看元素
System.out.println(arr[1]);//50
}
}
数组的常见操作
public static void main(String[]args){
//定义一个数组,动态初始化
int [] arr =new int [5];
//访问索引值为5的数组元素
System.out.println(arr[5]);
//java.long.ArrayIndexOutOfBounds.java 数组下表越界异常
//数组的索引时从0开始的,最大索引是arr.length-1
//如果访问元素时,索引不在该区间中,程序就会抛出数组越界异常。
}
}
数组空指针异常
public static void main(String[]args){
//动态初始化一个数组
int arr new int[3];
arr=null;
//查看arr数组元素
System.out.println(arr[2]);ava.
//java.ArrayNu11PointerException 空指针异常
//数组空指针异常,就是程序运行过程中,有一个内存中有一个不存在的一个变量被引用到了
}
数组遍历【重点】
//数组遍历:就是将数组中的每一个元素分别获取取来,就是遍历,
//遍历使我们操作数组的核心和重点内容。
public static void main(String[]args){
//静态初始化一个数组
int[] arr={1,2,3};
System.out.println(arr[0]);
System.out.println(arr[1]);
System.out.println(arr[2]);
/*
数组的索引依此递增,递增到arr.length-1为止,引入循环结构
代码优化:
*/
for(int i=0;i
获取数组中的最大值
最大值:从数组的所有元素中找到最大值。
思路:
1.定义一个最变量,保存数组当中的第一个元素,
2.遍历数组,获取数组当中的每一个元素。
3.将遍历的元素和保存的最大变量进行比较。
4.如果数组元素的大于最大值变量,就是把元素赋值给最大值变量。
5.数组遍历结束,最大值变量保存的就是数组当中的最大值。’
public static void main(String[]args){
//静态初始化一个数组容器
int []arr={45,12,74,45,6,100,45};
int max =arr[o];
for(int i=1;imax){
//如果数组元素的大于max就交换为位置
max=arr[i];
}
}
//数组遍历结束,最大变量保存的变量就是数组当中的最大值
System.out.println("数组最大值为"+max);
}
上一篇:JAVA程序流程控制
下一篇:数组的定义和访问