(四)数组概括

数组

JVM的内存模型

JVm内存划分

  • 程序计数器:当前线程执行的字节码的行号指示器
  • 本地方法栈:native方法服务(为虚拟机使用)
  • 方法区:线程共享的存储区域,有方法加载,就会该方法的类,字节码等就会存在方法区中
  • java虚拟机:方法被执行时会创建一个栈帧用于存储方法的局部变量,方法出口,动态链接等
  • java:每次使用new关键字,都会在堆中开辟内存空间,所有对象实例以及数组都在堆中分配

GC:垃圾回收器:JVM自动垃圾回收机制,自动清理无用的对象,释放内存空间

数组的定义

把具有相同类型的多个数据有序的组织起来的一种集合形式,简单来说数组相当于一个容器,就是可以存放多个数值,并且有序,类型要相同.

有序的根据:根据数组的索引值来找到对应第二数组元素

定义语法

数组元素类型[] 变量名;

注意:数组是有索引值的,从0开始.

int[] array;

数组的初始化

数组在定义后,需要初始化才能使用.初始化就在在堆内存中给数组分配内存空间,并赋予值.完成初始化后,数组的长度是固定的.

数组的静态初始化

如果知道元素是什么,那么可以选择静态初始化

1.
    数组元素类型[]  数组名 = new  数组元素类型[]{元素1,元素2...};
    int[] arr1 = new int[]{1,2,3,4};
2.简写
    数据元素类型[]  数组名 = {元素1,元素2....};
    int[] arr2 = {1,2,3,4};
数组的动态初始化

如果不知道数组元素有什么,知道长度可以使用动态初始化,也可以自己定义数组长度

数组元素类型[] 数组名 = new 数组元素类型[数组长度length];
int[] array3 = new int[5]; //定义动态数组,长度为5

动态初始化后有默认初始值,不同数据类型的初始值

数据类型默认初始化值
byte,short,int,long0
float,double0.0
char空格 ’ ’
booleanfalse
引用数据类型null,表示不引用任何对象

例子:

int[] arr = new int[4];
System.out.println(arr.length);

arr =new int[5];
System.out.println(arr.length);

内存图分析:

在这里插入图片描述

数组的基本操作

  • 获取数组长度:
int size = 数组名.length;
  • 获取元素值
数组元素类型 变量名 = 数组名[index];
  • 设置元素值
数组名[index] =;
  • 最大索引长度 :length-1
两种循环模式
i=0,i<length ;  循环次数:length次
i=1,i<=length ;  循环次数:length次
  • 常见异常
  1. NullPointerException:空指针异常
int[] arr2 = {3,5,6,7};
arr2 = null;
System.out.println(arr1.length); //空指针异常

2.ArrayIndexOutOfBoundsException 索引越界

int[] arr = {1,2,5,6};
 System.out.println(arr[5]); //索引越界
  • 遍历
//for循环遍历
int[] arr1 = {1,2,5,6};
for (int i = 0; i <=arr1.length-1 ; i++) {
            System.out.println(arr1[i]);
}

//for-each 增强for循环遍历
int[] arr2 = {1,3,5,7};
    for(int each:arr2){
        System.out.println(each);
}

//获取一个个元素: 
int arr1 = arr[0];
//修改索引对应的值 :
arr1[0] =16;

二维数组

二维数组,就是数组中的每一个元素是另一个一维数组。

二维数组的操作

语法:

静态初始化

数组元素类型[ ] [ ] 数组名 = new 数组元素类型[ ] [ ]{数组1,数组2,数组3,…};

        int[] arr1 = {1,2,3};
        int[] arr2 = {4,5,6,7};
        int[] arr3 = {56,7,7,9,53,6};
        int[][] array = new int[][]{arr1,arr2,arr3};
动态初始化

数组元素类型[ ] [ ] 数组名 = new 数组元素类型[ x] [ y]

//x表示二维数组中有几个一维数组
//y表示每一个一维数组中有几个元素
int[][] arr = new int[3][4];

遍历二维数组

for循环:

/动态初始化
        //声明了一个三行的二维数组,没有声明列(一维数组)
        int[][] array = new int[3][];
        int[] arr1 = {1,2,3};
        int[] arr2 = {1,2,3,4};
        int[] arr3 = {1,2,3,4,5};


        array[0] = arr1;
        array[1] = arr2;
        array[2] = arr3;

        for (int i = 0; i <array.length ; i++) {
            for (int j = 0; j <array[i].length ; j++) {
                System.out.print(array[i][j]+" ");
            }
            System.out.println();
        }

for-each,增强for循环

 //声明了一个二维数组(存了3个一位数组),一维数组也同时声明了,每个一维数组能存4个int类型
        int[][] array = new int[3][4];
  
       //赋值
        array[0][0] = 10;
        array[0][1] = 16;
        array[0][2] = 20;
        array[0][3] = 30;

        for(int[] arr:array){
            System.out.println(arr);
            for(int e:arr){
                System.out.print(e +" ");
            }
            System.out.println();
        }

思维导图

在这里插入图片描述

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值