Java 第四天(纯干货)(带你14天了解并掌握Java SE)

今日内容

  • 数组介绍及动态初始化
  • 数组内存结构及静态初始化
  • 数组常见问题及练习

01. 数组的概述和定义格式

  • 什么是数组?
  • 该如何定义数组?
总结:
    1: 数组就是一个【容器】,用来存储【同种数据类型】的多个值
    2: 数据类型[] 数组名;

        double[] dArr;      // 这是定义了一个double类型的数组,数组名叫dArr

02. 数组初始化之动态初始化

  • 数组有几种初始化方式?
  • 如何实现动态初始化?
总结:
    1: 
        动态初始化: 手动指定长度,由系统给出默认初始化值
        静态初始化

    2:  
        数据类型[] 数组名 = new 数据类型[数组的长度];

        打印数组变量:
         *  
         *      [I@26a2bd15
         * 
         *      @ :分隔符
         *      [ :标识当前的数据是一个数组类型,几个空括号代表的是几维数组
         *      I :代表当前数组是一个int类型数组
         *      26a2bd15 : 十六进制[地址值]

问题: 描述下列代码的每一步代表什么
      char[] arr = new char[2];

        char[] arr : 定义了数组类型变量, char类型数组,数组名叫arr

        new char[2]; : 初始化了一个char类型数组,数组的长度为2

03. 数组操作之获取数组中的元素

  • 什么是索引?
  • 怎样通过索引操作数组中的元素?
总结:
    1. 索引就是数组中,每一个元素的编号,编号从0开始,最大编号是数组的长度-1

        索引, 下标, 角标

    2. 数组名[索引]
  • 练习:
(5分钟)
定义一个长度为6的数组
并给数组中每个元素赋值2,4,6,8,10,12
取出数组中所有的元素并打印

04. Java中的内存分配图解

  • Java内存中分为那几块区域?
  • 数组在内存中创建的过程?
总结:
    1. 
        1. 桟内存 : 方法运行时,所进入的内存   -> 存放的一般都是变量
        2. 堆内存:new出来的东西都进入堆内存    -> 内部的数据都会产生地址值
        3. 方法区:.class文件加载的地方
        ------------------
        4. 本地方法区 : 调用了操作系统底层资源
        5. 寄存器:交给CPU去使用的            

    2. 再画一张
  • 数据的默认初始化值为?
总结:

    整数:         0
    小数:         0.0
    布尔:         false
    字符:         \u0000
    引用数据类型:     null

05. 一个数组的内存图

  • 案例演示: 创建数组存储元素.
  • 看图说话 (要求自己会画)

06. 两个数组的内存图

  • 案例演示: 定义两个数组,分别输出数组名及元素。然后分别给数组中的元素赋值,分别再次输出数组名及元素
  • 看图说话 (看懂即可)

07. 两个数组指向同一个地址的内存图

  • 案例演示:
    • 定义两个数组,先定义一个数组,赋值,输出。
    • 然后定义第二个数组的时候把第一个数组的地址赋值给第二个数组。
    • 然后给第二个数组赋值,再次输出两个数组的名及元素。
  • 看图说话 (看懂即可)

08. 数组初始化之静态初始化

  • 数组的静态初始化格式为?
  • 两种初始化有什么区别?
总结:
    1. 完整格式:
         数据类型[] 数组名 = new数据类型[]{元素1,元素2,元素3...};
       简化格式:
         数据类型[] 数组名 = {元素1,元素2,元素3...};
    2. 动态初始化和静态初始化的区别:

            动态: 手动给定长度,由系统给出默认初始化值
                        int[] arr = new int[3];

            静态: 手动给出元素,由系统计算出数组的长度

                        int[] arr = {11,22,33};

应用:
    什么时候用动态初始化?
        如果要完成的需求,只明确了数据的数量,但是不明确具体的数值,就使用动态初始化
            举例:键盘录入5个数据,存储到数组中并求和

    什么时候用静态初始化?
        如果要操作的数据都是现有的,就使用静态初始化
            举例:将数据2,4,6,8,10存储到数组中并求和

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

  • 常见的问题有哪些? 又是怎样引发的?
总结:
    1: ArrayIndexOutOfBoundsException : 数组索引越界异常

            原因:当访问了不存在的索引

    2: NullPointerException : 空指针异常

            原因:当引用数据类型的变量不再记录地址值,而还想使用变量去访问堆内存的数据,就会抛出此异常

10. 数组操作之遍历数组

  • 什么是数组的遍历?
  • 数组名.length代表的是什么?
总结:
    1. 将数组中的每一个元素,取出来
    2. 数组的长度
  • 转ppt两个练习

11. 数组操作之获取最值

  • 分析需求, 案例演示

12. 数组练习之评委打分

  • 需求:

    • 在编程竞赛中,有6个评委为参赛的选手打分,分数为0-100的整数分。
    • 选手的最后得分为:去掉一个最高分和一个最低分后 的4个评委平均值。
    • 请写代码实现。(不考虑小数部分)
  • 分析:

    • A:定义一个长度为6的数组
    • B:键盘录入评委的分数
    • C:获取最高分,最低分
    • D:求评委的分数和
    • E:平均分:(和-最高分-最低分)/(arr.length-2)
    • F:输出平均分即可

13. 数组练习之不死神兔(斐波那切数列)

  • 需求:
    • 有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子
    • 假如兔子都不死,问第二十个月的兔子对数为多少?
* 1 1 2 3 5 8 13 21 ...

    int[] arr = new int[8];

    arr[0] = 1;
    arr[1] = 1;

    for(int i = 2; i < arr.length; i++){
        arr[i] = arr[i-2] + arr[i-1];
    }

    System.out.println(arr[arr.length-1]);
  • 如果求的月份过多, 会产生什么样的问题?
    • BigInteger解决.
    • TODO:// Api阶段补充

猜你喜欢

转载自blog.csdn.net/weixin_42261489/article/details/88081232