• day04_java基础


    day04_java基础&IDEA开发工具

    一、课程目标

    2. 【理解】 什么是数组
    3. 【掌握】 数组的定义及初始化
    4. 【理解】 数组的内存图
    6. 【理解】 数组常见的问题
    7. 【掌握】 数组的案例
    8. 【理解】 二维数组

    三、一维数组

    3.1 什么是数组

    数组就是存储数据长度固定的容器,存储多个数据的数据类型要一致。

    3.2 数组定义格式

    3.2.1 格式一

    数据类型[] 数组名;

    示例:

    int[] arr;        
    double[] arr;      
    char[] arr;

    3.2.2 格式二

    数据类型 数组名[];

    示例:

    int arr[];
    double arr[];
    char arr[];

    3.3 数组初始化

    3.3.1 数组动态初始化

    3.3.1.1 什么是动态初始化

    数组动态初始化就是只给定数组的长度,由系统给出默认初始化值

    3.3.1.2 动态初始化格式

    数据类型[] 数组名 = new 数据类型[数组长度];
    int[] arr = new int[3];

    3.3.1.3 动态初始化格式详解

    • 等号左边

      • int:数组的数据类型

      • []:代表这是一个数组

      • arr:代表数组的名称

    • 等号右边

      • new:为数组开辟内存空间

      • int:数组的数据类型

      • []:代表这是一个数组

      • 3:代表数组的长度

    3.3.2 数组静态初始化

    3.3.2.1 什么是静态初始化

    在创建数组时,直接将元素确定,由系统计算出数组的长度

    3.3.2.2 静态初始化格式

    • 完整版格式

      数据类型[] 数组名 = new 数据类型[]{元素1,元素2,...};
    • 简化版格式

      数据类型[] 数组名 = {元素1,元素2,...};

    3.3.2.3 示例代码

    public class ArrayDemo {
        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]);
        }
    }

    3.4 数组元素访问

    3.4.1 什么是索引

    每一个存储到数组的元素,都会自动的拥有一个编号,从0开始。
    这个自动编号称为数组索引(index),可以通过数组的索引访问到数组中的元素。 	

    3.4.2 访问数组元素格式

    数组名[索引];

    3.4.3 示例代码

    public class ArrayDemo {
        public static void main(String[] args) {
            int[] arr = new int[3];
    
            //输出数组名
            System.out.println(arr); //[I@880ec60
    
            //输出数组中的元素
            System.out.println(arr[0]);
            System.out.println(arr[1]);
            System.out.println(arr[2]);
        }
    }

    3.5 内存分配

    3.5.1 内存概述

    内存是计算机中的重要原件,临时存储区域,作用是运行程序。
    我们编写的程序是存放在硬盘中的,在硬盘中的程序是不会运行的。
    必须放进内存中才能运行,运行完毕后会清空内存。 
    Java虚拟机要运行程序,必须要对内存进行空间的分配和管理。 

    3.5.2 java中的内存分配

    目前我们只需要记住两个内存,分别是:栈内存和堆内存

    区域名称作用
    寄存器给CPU使用,和我们开发无关。
    本地方法栈JVM在使用操作系统功能的时候使用,和我们开发无关。
    方法区存储可以运行的class文件。
    堆内存存储对象或者数组,new来创建的,都存储在堆内存。
    方法栈方法运行时使用的内存,比如main方法运行,进入方法栈中执行。

    3.6 数组内存图

    3.6.1 单个数组的内存图

    3.6.2 多个数组的内存图

    3.6.3 多个数组指向相同内存图

    3.7 数组操作的两个常见小问题

    3.7.1 索引越界异常

    • 出现原因

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

      数组长度为3,索引范围是0~2,但是我们却访问了一个3的索引。

      程序运行后,将会抛出ArrayIndexOutOfBoundsException 数组越界异常。在开发中,数组的越界异常是不能出现的,一旦出现了,就必须要修改我们编写的代码。

    • 解决方案

      将错误的索引修改为正确的索引范围即可!

    3.7.2 空指针异常

    • 出现原因

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

      arr = null 这行代码,意味着变量arr将不会在保存数组的内存地址,也就不允许再操作数组了,因此运行的时候会抛出 NullPointerException 空指针异常。在开发中,数组的越界异常是不能出现的,一旦出现了,就必须要修改我们编写的代码。

    • 解决方案

      给数组一个真正的堆内存空间引用即可!

    3.8 数组案例

    3.8.1 数组遍历

    就是将数组中的每个元素分别获取出来,就是遍历。遍历也是数组操作中的基石。

    public class ArrayTest01 {
    	public static void main(String[] args) {
    		int[] arr = { 1, 2, 3, 4, 5 };
    		System.out.println(arr[0]);
    		System.out.println(arr[1]);
    		System.out.println(arr[2]);
    		System.out.println(arr[3]);
    		System.out.println(arr[4]);
    	}
    }

    以上代码是可以将数组中每个元素全部遍历出来,但是如果数组元素非常多,这种写法肯定不行,因此我们需要改造成循环的写法。数组的索引是 0 到 lenght-1 ,可以作为循环的条件出现。

    public class ArrayTest01 {
        public static void main(String[] args) {
            //定义数组
            int[] arr = {11, 22, 33, 44, 55};
    
            //使用通用的遍历格式
            for(int x=0; x 
    

    3.8.2 数组最值

    数组最值就是从数组的所有元素中找出最大值或最小值

    3.8.2.1 实现思路

    - 定义变量,保存数组0索引上的元素
    - 遍历数组,获取出数组中的每个元素
    - 将遍历到的元素和保存数组0索引上值的变量进行比较
    - 如果数组元素的值大于了变量的值,变量记录住新的值
    - 数组循环遍历结束,变量保存的就是数组中的最大值 

    3.8.2.2 代码实现

    public class ArrayTest02 {
        public static void main(String[] args) {
            //定义数组
            int[] arr = {12, 45, 98, 73, 60};
    
            //定义一个变量,用于保存最大值
            //取数组中第一个数据作为变量的初始值
            int max = arr[0];
    
            //与数组中剩余的数据逐个比对,每次比对将最大值保存到变量中
            for(int x=1; x max) {
                    max = arr[x];
                }
            }
    
            //循环结束后打印变量的值
            System.out.println("max:" + max);
    
        }
    }

    3.8.3 数组元素反转

    数组中的元素颠倒顺序,例如原始数组为1,2,3,4,5,反转后的数组为5,4,3,2,1

    3.8.3.1 实现思路

    数组最远端的元素互换位置。

    实现反转,就需要将数组最远端元素位置交换

    定义两个变量,保存数组的最小索引和最大索引

    两个索引上的元素交换位置

    最小索引++,最大索引--,再次交换位置

    最小索引超过了最大索引,数组反转操作结束

    3.8.3.2 代码实现

    public static void main(String[] args) {
        int[] arr = { 1, 2, 3, 4, 5 };
        /*
          循环中定义变量min=0最小索引
          max=arr.length‐1最大索引
          min++,max‐‐
          */
        for (int min = 0, max = arr.length ‐ 1; min <= max; min++, max‐‐) {      
            //利用第三方变量完成数组中的元素交换
            int temp = arr[min];
            arr[min] = arr[max];
            arr[max] = temp;
        }
        // 反转后,遍历数组
        for (int i = 0; i < arr.length; i++) {
            System.out.println(arr[i]);
        }
    }
    

    四、二维数组

    4.1 什么是二维数组

    二维数组其实就是一个元素为一维数组的数组

    4.2 二维数组格式

    4.2.1 格式一

    数据类型[][] 变量名 = new 数据类型[m][n];
    • 格式解释

      • m表示这个二维数组有多少个一维数组

      • n表示每一个一维数组的元素个数

    • 举例

      int[][] arr = new int[3][2];
      	定义了一个二维数组arr
      	这个二维数组有3个一维数组,名称是arr[0],arr[1],arr[2]
      	每个一维数组有2个元素,可以通过arr[m][n]来获取
      	表示获取第m+1个一维数组的第n+1个元素

    4.2.2 格式二

    数据类型[][] 变量名 = new 数据类型[m][];
    • 格式解释

      • m表示这个二维数组有多少个一维数组

      • 这一次没有直接给出一维数组的元素个数,可以动态的给出

    • 举例

      int[][] arr = new int[3][];
      // 第一个数组的元素个数为2
      arr[0] = new int[2];
      // 第一个数组的元素个数为3
      arr[1] = new int[3]
      // 第一个数组的元素个数为1
      arr[2] = new int[1];

    4.2.3 格式三

    标准版:
    	数据类型[][] 变量名 = new 数据类型[][]{{元素…},{元素…},{元素…}};
    简化版:
    	数据类型[][] 变量名 = {{元素…},{元素…},{元素…}};

    • 举例

      int[][] arr =  {{1,2,3},{4,5},{6}};

    4.3 二维数组案例

    • 需求

      求公司年销售额求和

    • 需求描述

      某公司按照季度和月份统计的数据如下:单位(万元) 第一季度:22,66,44 第二季度:77,33,88 第三季度:25,45,65 第四季度:11,66,99

    • 案例代码

      public class ArrayCase {
          public static void main(String[] args) {
              // 定义二维数组
              int[][] arr = {{22, 66, 44}, {77, 33, 88}, {25, 45, 65}, {11, 66, 99}};
      
              // 求总和
              int he = 0;
      
              for (int i = 0; i < arr.length; i++) {
                  // 求每一季度的总销售额
                  int sum = 0;
                  for (int j = 0; j < arr[i].length; j++) {
                      sum += arr[i][j];
                  }
      
                  // 将每一季度的总销售额累加到总和
                  he += sum;
                  System.out.println("第" + (i + 1) + "季度的销售额是:" + sum);
              }
      
              System.out.println("总销售额: " + he);
          }
      }
  • 相关阅读:
    【嵌入式C】栈内存与printf,代码正确运行,删掉 printf 代码就崩溃了??
    【Delphi】FMX Form的BorderStyles不同平台说明
    在Android studio 创建Flutter项目运行出现问题总结
    阿里云:加大NoSQL数据库软硬件一体化技术自研
    SpringBoot整合Kafka
    Zabbix监控指定端口
    (王道考研计算机网络)第四章网络层-第七、八节:移动IP和网络层设备
    mysql包select结果无法同步的问题
    rsync + inotify 同步数据
    【LeetCode】148. 排序链表
  • 原文地址:https://blog.csdn.net/BS009/article/details/125869649