• 4.Java数组模块


    Java数组模块

    1.数组定义

    数组(array)是一种用于存储多个相同类型数据的存储格式

    数组两种定义格式:

    • 数据类型[] 变量名

    定义类一个int类型的数组变量,变量名为arr,推荐使用

    int[] arr
    
    • 数据类型 变量名[]
    int arr[]
    

    2.数组初始化

    java数组必须先初始化才能使用

    初始化:为数组中的数组元素分配内存空间,为每个数组元素赋值

    数组初始化方法

    1. 动态初始化:初始化时只指定数组长度,由系统为数组分配初始值

    格式:数据类型[] 变量名 = new 数据类型[数组长度];

    int [] arr = new int[3]
    

    示例

    public class ArrayDemo {
        public static void main(String[] args) {
            // 数组动态初始化
            int[] arr = new int[3];
            /*
                左:
                    int:数组中元素为int类型
                    []:这是一个数组
                    arr:数组的名称
                右:
                    new:为数组申请内存空间
                    int:数组元素为int类型
                    []:这是一个数组
                    3:数组长度,就是数组中元素的个数
             */
        }
    }
    

    3.数组元素访问

    数组内部元素的访问方式

    格式:数组名[索引]

    • 索引:数组中数据的编号方式

    • 作用:用于访问数组中的数据,数组名[索引]等同于变量名,一种特殊的变量名

      • 特征1:索引从0开始
      • 特征2:索引是连续的
      • 特征3:逐一增加,每次加1
    public class ArrayDemo {
        public static void main(String[] args) {
            // 数组动态初始化
            int[] arr = new int[3];
    
            // 输出数组名
            System.out.println(arr);  // [I@5a39699c
    
            // 输出数组中的元素
            System.out.println(arr[0]);  // 0
            System.out.println(arr[1]);  // 0
            System.out.println(arr[2]);  // 0
        }
    }
    

    4.内存分配

    java内存分配

    int[] arr = new int[3];
    
    // 输出数组名
    System.out.println(arr);  // [I@5a39699c  内存地址
    
    // 输出数组中的元素
    System.out.println(arr[0]);  // 0
    System.out.println(arr[1]);  // 0
    System.out.println(arr[2]);  // 0
    

    new:开辟内存空间

    image-20200703203840674

    内存中取值的过程

    image-20200703203640480

    内存分配类别

    image-20200703204347568

    • 栈内存:存储局部变量

    定义在方法中的变量,例如:arr

    使用完毕立即消失

    • 堆内存:存储new出来的内容(实体,对象)

    数组在初始化时,会为存储空间添加默认值

    ​ 整数:默认值0

    ​ 浮点数:默认值0.0

    ​ 布尔值:默认值false

    ​ 字符:默认是空字符

    ​ 引用数据类型:默认是null

    每一个new出来的东西都有一个地址值,使用完毕,会在垃圾回收期空闲时被回收。

    数组内存图(单个数组)

    ![Kapture 2020-07-03 at 20.48.53](/Users/ryxiong/desk/目前学习/java基础/resource/Kapture 2020-07-03 at 20.48.53.gif)

    数组内存图(多个)

    ![Kapture 2020-07-03 at 20.56.13](/Users/ryxiong/desk/目前学习/java基础/resource/Kapture 2020-07-03 at 20.56.13.gif)

    数组内存图(多个指向同一个)

    ![Kapture 2020-07-03 at 20.59.47](/Users/ryxiong/desk/目前学习/java基础/resource/Kapture 2020-07-03 at 20.59.47.gif)

    5.数组初始化-静态初始化

    静态初始化:初始化时指定每个数组元素的初始值,有系统决定数组长度

    格式: 数据类型[] 变量名 = new 数据类型[] {数据1, 数据2, 数据3, ...}

    示例:

    int[] arr = new int[] {1, 2, 3}
    

    简化格式:数据类型[] 变量名 = {数据1, 数据2, 数据3,...}

    推荐:

    int[] arr = {1, 2, 3}
    

    例子

    public class ArrayDemo01 {
        public static void main(String[] args) {
            // 定义数组
            int [] arr = {1, 2, 3};
            // 输出数组名
            System.out.println(arr);
    
            // 输出数组中的元素
            System.out.println(arr[0]);
            System.out.println(arr[1]);
            System.out.println(arr[2]);
        }
    }
    
    /*
    [I@5a39699c
    1
    2
    3
    */
    

    5.数组操作的问题

    越界索引:访问数组中不存的索引对应的元素,造成索引越界问题

    public class ArrayDemo02 {
        public static void main(String[] args) {
            int[] arr = new int[3];
            System.out.println(arr[3]);
        }
    }
    

    Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: Index 3 out of bounds for length 3
    at java_01.ArrayDemo02.main(ArrayDemo02.java:6)

    空指针异常:访问数组已经不再指向堆内存的数据,造成空指针异常

    public class ArrayDemo03 {
        public static void main(String[] args) {
            int[] arr = new int[3];
            // 把null赋值给数组
            arr = null;
            System.out.println(arr[0]);
        }
    }
    

    Exception in thread "main" java.lang.NullPointerException
    at java_01.ArrayDemo03.main(ArrayDemo03.java:8)

    7.数据常见操作

    数组遍历

    获取数组长度

    数组名.length

    示例:arr.length

    public class ArrayDemo04 {
        public static void main(String[] args) {
            int[] arr = {1, 2, 3, 4, 5, 6};
            // 遍历数组
            for(int i=0; i<arr.length; i++) {
                System.out.println(arr[i]);
            }
        }
    }
    

    获取最值

    public class ArrayDemo04 {
        public static void main(String[] args) {
            int[] arr = {1, 2, 3, 4, 5, 6};
            int max = arr[0];
            // 遍历数组
            for(int i=0; i<arr.length; i++) {
                if (arr[i] > max) {
                    max = arr[i];
                }
            }
            System.out.println(max);
        }
    }
    
  • 相关阅读:
    应对https协议的下载方式
    订单峰值激增 230%,Serverless 如何为世纪联华降本超 40%?|双11 云原生实践
    阿里云函数计算发布新功能,支持容器镜像,加速应用 Serverless 进程
    专访阿里云 Serverless 负责人:无服务器不会让后端失业
    从零入门 Serverless | SAE 的远程调试和云端联调
    我在阿里巴巴做 Serverless 云开发平台
    高德最佳实践:Serverless 规模化落地有哪些价值?
    [图论总结1]最大独立集(例题:Code Names)
    Excel导入SQL工具【3.02】
    学习笔记助手【2.01】base1 更新
  • 原文地址:https://www.cnblogs.com/ryxiong-blog/p/13890166.html
Copyright © 2020-2023  润新知