• 数组相关知识


    数组的介绍:

    数组指的是一种容器,他可以用来存储同种数组的多个值

    数组静态初始化

    在内存中为数组容器开辟空间,并存储到容器的过程

    格式一: 数据类型[] 数组名
            int[] array
    格式二: 数据类型  数组名[]
            int array[]
            int[] array1; // 这是数组类型的变量,没开辟容器
    完整格式: 数据类型[] 数组名 = new 数据类型[]{元素1,元素2,元素3...} //数值内容数据类型必须完全一致
    简化格式: 数据类型[] 数组名 = {11,12,33}
    System.out.println(arr1)//[d@776ec8df  数组的内存地址--16进制  
                          [--->当前空间是一个数组类型
                            d --->空间存储的数据类型
                            @:分隔符
                            776ec8df---->十六进制的

    数组的元素访问

    访问格式:
        数组名[索引]
    索引(角标,下标):索引是数组容器中空间的编号,编号从0开始,逐个+1增长
    数组每一个值都称为元素(存在隐式转换)
    double[]dArr = {11,22.2,33.3,44.4,55.5}
    //将33.3取出
    System.out.println(dArr[2])
    //修改55.5改成66.6
    dArr[4]=66.6;

    遍历数组操作

    数组的通用遍历方式 for(int i = 0 ; i < 5 ; i++){ //i:代表索引 System.out.println(arr[i]); }
    数组的遍历:快捷键 arr.fori
    什么时候对数组进行遍历操作??
    -如果要实现的需求,是对数组的[每一个]元素进行操作,就需要对数组进行遍历

    数组动态初始化

    初始化时,至指定数组的长度,由系统为数组分配初初始值
    格式: 数据类型[] 数组名 = new 数据类型[长度]
    默认初始化值:
    小数类型:0.0  
    布尔类型:false  
    字符类型:'u0000' ---->空白字符  ----> Unicode字符 ASCII码表  

    引用数据类型:null(空)  

    引用数据类型:类,接口,数组。 

     引用了(记录了)一份地址的变量,该变量所对应的数据类型就是引用数据类型。  

    iArr = [d@776ec8df  ​ ​
    整数类型:
    0

     

    数组初始化区别

    • 动态手动指定数组长度,由系统

      • 只明确要存储的元素是个数,但不明确具体数值

    • 静态

      • 如果要 操作的数据,在需求中已经明确给出了

    数组内存图

      • 方法运行是进入的内存

      • new出来的东西都会在堆内存开辟空间

    • 方法区

      • 字节码文件(.class)加载时所进入的内存

    两个数组指向相同的内存图

     ① .class 和main方法进入方法区

    ② main方法进入栈内存,开辟新空间,首先会按顺序执行,执行int[ ] array1 = {11,22,33};这里其实是数组的简写,在执行的时候,数组简写也会按照完整版 int[] array1 = new int [ ] {11,22,33};执行, 看到new,说明要进入堆内存开辟空间

    ③ 进入堆内存后,首先会在堆内存中开辟一个数组的空间,将array1数组的元素存储到这个空间中,存储好了之后,他会形成一个这个空间的地址,方便查询

    ④然后这个地址会赋值给array1这个数组,如果我们打印该数组的话,他会打印一次地址值

    ⑤执行完array1之后,顺序执行int { } array2 = array1; 因为array1存放的是地址值,array1直接赋值的话会传给array2地址值,这样array2这个数组他的地址值和array1的地址值相同,这样他们在堆内存的空间也是同一个。

    ⑥这样他们打印0号索引位置的元素,都会是100

    数组常见的问题

    ArrayIndexOutOfBoundsException 当访问量数组中不存在的索引,会引发索引越界异常

    当引用数组类型变量被赋值为  null 之后,地址的指向被切断,还继续访问堆内存数据,就会引发空指针异常

    二维数组

    二维数组也是一种容器,而他存储的是一堆数组(属于数组的嵌套)

    二维数组的静态初始化

    数据类型[][] 数组名 = new 数据类型[][]{{元素1,元素2},{元素3,元素4}};
    
    数据类型[][] 数组名 = {{元素1,元素2},{元素3,元素4}};
    
    //元素访问
    system.out.println(arr[][]);

    二维数组的元素访问

    system.out.println(arr);//看到二维数值的地址值
    system.out.println(arr[0]);//看到一维数值的地址值

    二维数组的遍历操作

    int[][] arr = {
    
    {11,22,33},
    
    {21,33,45}
    
    };
    
    for(int i = 0 ; i <arr.length; i++){
    
        for(int j = 0; j <arr[i].length; j++){
    
            system.out.println(arr[i][j]);
    
    }
    
    }


    二维数组的动态初始化

    
    

    格式:
    数据类型[][] 数组名 = new 数据类型[m][n]
    m:可以存储多个一维数组
    n:每一个一维数组可以存储多少个元素
    int[][] arr = new int[2][3]
    这个二维数组可以存储两个一维数组,每个一维数组三个元素

     
  • 相关阅读:
    关于多个EditText的OnTextChange事件陷入死循环的处理
    #define #include #undef的其中一个用法(目的)
    串行移位锁存并行输出可级联器件74HC595
    STM32F10xx CAN BUS相关库文件"stm32f10x_can.c"内的库函数解析
    STM32 之 NVIC(中断向量、优先级) 简述
    STM32F103xx bxCAN(Basic Extended CAN) 滤波机制
    VS上利用C#实现一个简单的串口程序记录
    如何去各型MCU的官网上下载正确的数据手册
    Cotex-M3内核STM32F10XX系列时钟及其配置方法
    Stm32 debug停留在"BKPT 0xAB"或者"SWI 0xAB"的解决办法。
  • 原文地址:https://www.cnblogs.com/TTTAO/p/15322890.html
Copyright © 2020-2023  润新知