编程学习
🗒️2019黑马java笔记②
00 分钟
2024-2-26
2024-3-2
type
status
date
slug
summary
tags
category
icon
password

1.数组

1.1什么是数组【理解】

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

1.2数组定义格式【记忆】

1.2.1第一种

数据类型[] 数组名
示例:

1.2.2第二种

数据类型 数组名[]
示例:

1.3数组动态初始化【应用】

1.3.1什么是动态初始化

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

1.3.2动态初始化格式

1.3.3动态初始化格式详解

  • 等号左边:
    • int:数组的数据类型
    • []:代表这是一个数组
    • arr:代表数组的名称
  • 等号右边:
    • new:为数组开辟内存空间
    • int:数组的数据类型
    • []:代表这是一个数组
    • 5:代表数组的长度

1.4数组元素访问【应用】

1.4.1什么是索引

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

1.4.2访问数组元素格式

1.4.3示例代码

1.5内存分配【理解】

1.5.1内存概述

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

1.5.2java中的内存分配

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

1.6单个数组的内存图【理解】

1.7多个数组的内存图【理解】

1.8多个数组指向相同内存图【理解】

1.9数组静态初始化【应用】

1.9.1什么是静态初始化

在创建数组时,直接将元素确定

1.9.2静态初始化格式

  • 完整版格式
    • 简化版格式

      1.9.3示例代码

      1.10数组操作的两个常见小问题【应用】

      1.10.1索引越界异常

      • 出现原因
        • 数组长度为3,索引范围是0~2,但是我们却访问了一个3的索引。
          程序运行后,将会抛出ArrayIndexOutOfBoundsException 数组越界异常。在开发中,数组的越界异常是不能出现的,一旦出现了,就必须要修改我们编写的代码。
      • 解决方案
        • 将错误的索引修改为正确的索引范围即可!

      1.10.2空指针异常

      • 出现原因
        • arr = null 这行代码,意味着变量arr将不会在保存数组的内存地址,也就不允许再操作数组了,因此运行的时候会抛出 NullPointerException 空指针异常。在开发中,数组的越界异常是不能出现的,一旦出现了,就必须要修改我们编写的代码。
      • 解决方案
        • 给数组一个真正的堆内存空间引用即可!

      1.11数组遍历【应用】

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

      1.12数组最值【应用】

      • 最大值获取:从数组的所有元素中找出最大值。
      • 实现思路:
        • 定义变量,保存数组0索引上的元素
        • 遍历数组,获取出数组中的每个元素
        • 将遍历到的元素和保存数组0索引上值的变量进行比较
        • 如果数组元素的值大于了变量的值,变量记录住新的值
        • 数组循环遍历结束,变量保存的就是数组中的最大值
      • 代码实现:

        1. 方法概述

        1.1 方法的概念(理解)

        方法(method)是将具有独立功能的代码块组织成为一个整体,使其具有特殊功能的代码集
        • 注意:
          • 方法必须先创建才可以使用,该过程成为方法定义
          • 方法创建后并不是直接可以运行的,需要手动使用后,才执行,该过程成为方法调用

        2. 方法的定义和调用

        2.1 无参数方法定义和调用(掌握)

        • 定义格式:
          • 范例:
            • 调用格式:
              • 范例:
                • 注意:
                  • 方法必须先定义,后调用,否则程序将报错

                2.2 方法调用过程图解(理解)

                notion image
                • 总结:每个方法在被调用执行的时候,都会进入栈内存,并且拥有自己独立的内存空间,方法内部代码调用完毕之后,会从栈内存中弹栈消失。

                2.3 无参数方法的练习(应用)

                • 需求:设计一个方法用于打印两个数中的较大数
                • 思路:
                  • ①定义一个方法,用于打印两个数字中的较大数,例如getMax()
                  • ②方法中定义两个变量,用于保存两个数字
                  • ③使用分支语句分两种情况对两个数字的大小关系进行处理
                  • ④在main()方法中调用定义好的方法
                • 代码:

                3. 带参数方法定义和调用

                3.1 带参数方法定义和调用(掌握)

                • 定义格式:
                  • 参数:由数据类型和变量名组成 - 数据类型 变量名
                    参数范例:int a
                • 范例:
                  • 注意:
                  • 调用格式:
                    • 范例:
                      • 方法调用时,参数的数量与类型必须与方法定义中的设置相匹配,否则程序将报错

                    3.2 形参和实参(理解)

                    1. 形参:方法定义中的参数
                    等同于变量定义格式,例如:int number
                    1. 实参:方法调用中的参数
                    等同于使用变量或常量,例如: 10 number

                    3.3 带参数方法练习(应用)

                    • 需求:设计一个方法用于打印两个数中的较大数,数据来自于方法参数 }
                    • 思路:
                      • ①定义一个方法,用于打印两个数字中的较大数,例如getMax()
                      • ②为方法定义两个参数,用于接收两个数字
                      • ③使用分支语句分两种情况对两个数字的大小关系进行处理
                      • ④在main()方法中调用定义好的方法(使用常量)
                      • ⑤在main()方法中调用定义好的方法(使用变量)
                    • 代码:

                    4. 带返回值方法的定义和调用

                    4.1 带返回值方法定义和调用(掌握)

                    • 定义格式
                      • 范例
                        • 注意:
                          • 方法定义时return后面的返回值与方法定义上的数据类型要匹配,否则程序将报错
                      • 调用格式
                        • 范例
                          • 注意:
                            • 方法的返回值通常会使用变量接收,否则该返回值将无意义

                        4.2 带返回值方法练习(应用)

                        • 需求:设计一个方法可以获取两个数的较大值,数据来自于参数
                        • 思路:
                          • ①定义一个方法,用于获取两个数字中的较大数
                          • ②使用分支语句分两种情况对两个数字的大小关系进行处理
                          • ③根据题设分别设置两种情况下对应的返回结果
                          • ④在main()方法中调用定义好的方法并使用变量保存
                          • ⑤在main()方法中调用定义好的方法并直接打印结果
                        • 代码:

                          5. 方法的注意事项

                          5.1 方法的注意事项(掌握)

                          • 方法不能嵌套定义
                            • 示例代码:
                            • void表示无返回值,可以省略return,也可以单独的书写return,后面不加数据
                              • 示例代码:

                              5.2 方法的通用格式(掌握)

                              • 格式:
                                • 解释:
                                  • public static 修饰符,目前先记住这个格式
                                    • 返回值类型 方法操作完毕之后返回的数据的数据类型
                                      如果方法操作完毕,没有数据返回,这里写void,而且方法体中一般不写return
                                      方法名 调用方法时候使用的标识
                                      参数 由数据类型和变量名组成,多个参数之间用逗号隔开
                                      方法体 完成功能的代码块
                                      return 如果方法操作完毕,有数据返回,用于把数据返回给调用者
                                • 定义方法时,要做到两个明确
                                  • 明确返回值类型:主要是明确方法操作完毕之后是否有数据返回,如果没有,写void;如果有,写对应的数据类型
                                  • 明确参数:主要是明确参数的类型和数量
                                • 调用方法时的注意:
                                  • void类型的方法,直接调用即可
                                  • 非void类型的方法,推荐用变量接收调用

                                6. 方法重载

                                6.1 方法重载(理解)

                                • 方法重载概念
                                  • 方法重载指同一个类中定义的多个方法之间的关系,满足下列条件的多个方法相互构成重载
                                  • 多个方法在同一个类中
                                  • 多个方法具有相同的方法名
                                  • 多个方法的参数不相同,类型不同或者数量不同
                                • 注意:
                                  • 重载仅对应方法的定义,与方法的调用无关,调用方式参照标准格式
                                  • 重载仅针对同一个类中方法的名称与参数进行识别,与返回值无关,换句话说不能通过返回值来判定两个方法是否相互构成重载
                                • 正确范例:
                                  • 错误范例:

                                    6.2 方法重载练习(掌握)

                                    • 需求:使用方法重载的思想,设计比较两个整数是否相同的方法,兼容全整数类型(byte,short,int,long)
                                    • 思路:
                                      • ①定义比较两个数字的是否相同的方法compare()方法,参数选择两个int型参数
                                      • ②定义对应的重载方法,变更对应的参数类型,参数变更为两个long型参数
                                      • ③定义所有的重载方法,两个byte类型与两个short类型参数
                                      • ④完成方法的调用,测试运行结果
                                    • 代码:

                                      7. 方法的参数传递

                                      7.1 方法参数传递基本类型(理解)

                                      • 测试代码:
                                        • 结论:
                                          • 基本数据类型的参数,形式参数的改变,不影响实际参数
                                        • 结论依据:
                                          • 每个方法在栈内存中,都会有独立的栈空间,方法运行结束后就会弹栈消失
                                            • notion image

                                        7.2 方法参数传递引用类型(理解)

                                        • 测试代码:
                                          • 结论:
                                            • 对于引用类型的参数,形式参数的改变,影响实际参数的值
                                          • 结论依据:
                                            • 引用数据类型的传参,传入的是地址值,内存中会造成两个引用指向同一个内存的效果,所以即使方法弹栈,堆内存中的数据也已经是改变后的结果
                                              • notion image

                                          7.3 数组遍历(应用)

                                          • 需求:设计一个方法用于数组遍历,要求遍历的结果是在一行上的。例如:[11, 22, 33, 44, 55]
                                          • 思路:
                                            • ①因为要求结果在一行上输出,所以这里需要在学习一个新的输出语句System.out.print(“内容”);
                                              • System.out.println(“内容”); 输出内容并换行
                                                System.out.print(“内容”); 输出内容不换行
                                                System.out.println(); 起到换行的作用
                                            • ②定义一个数组,用静态初始化完成数组元素初始化
                                            • ③定义一个方法,用数组遍历通用格式对数组进行遍历
                                            • ④用新的输出语句修改遍历操作
                                            • ⑤调用遍历方法
                                          • 代码:

                                            7.4 数组最大值(应用)

                                            • 需求:设计一个方法用于获取数组中元素的最大值
                                            • 思路:
                                              • ①定义一个数组,用静态初始化完成数组元素初始化
                                              • ②定义一个方法,用来获取数组中的最大值,最值的认知和讲解我们在数组中已经讲解过了
                                              • ③调用获取最大值方法,用变量接收返回结果
                                              • ④把结果输出在控制台
                                            • 代码:

                                              1.Debug模式

                                              1.1什么是Debug模式【理解】

                                              是供程序员使用的程序调试工具,它可以用于查看程序的执行流程,也可以用于追踪程序执行过程来调试程序。

                                              1.2Debug模式操作流程【应用】

                                              • 如何加断点
                                                • 选择要设置断点的代码行,在行号的区域后面单击鼠标左键即可
                                                • notion image
                                              • 如何运行加了断点的程序
                                                • 在代码区域右键Debug执行
                                                • notion image
                                              • 看哪里
                                                • 看Debugger窗口
                                                • notion image
                                                • 看Console窗口
                                                • notion image
                                              • 点哪里
                                                • 点Step Into (F7)这个箭头,也可以直接按F7
                                                • notion image
                                              • 如何删除断点
                                                • 选择要删除的断点,单击鼠标左键即可
                                                • notion image
                                                • 如果是多个断点,可以每一个再点击一次。也可以一次性全部删除
                                                • notion image

                                              2.基础练习

                                              2.1减肥计划if版本【应用】

                                              2.1.1案例需求

                                              输入星期数,显示今天的减肥活动 周一:跑步 周二:游泳 周三:慢走 周四:动感单车 周五:拳击 周六:爬山 周日:好好吃一顿

                                              2.1.2代码实现

                                              2.2减肥计划switch版本【应用】

                                              2.2.1案例需求

                                              输入星期数,显示今天的减肥活动 周一:跑步 周二:游泳 周三:慢走 周四:动感单车 周五:拳击 周六:爬山 周日:好好吃一顿

                                              2.2.2代码实现

                                              2.3逢七跳过【应用】

                                              2.3.1案例需求

                                              朋友聚会的时候可能会玩一个游戏:逢七过。 规则是:从任意一个数字开始报数,当你要报的数字包含7或者是7的倍数时都要说:过。 为了帮助大家更好的玩这个游戏,这里我们直接在控制台打印出1-100之间的满足逢七必过规则的数据。 这样,大家将来在玩游戏的时候,就知道哪些数据要说:过。

                                              2.3.2代码实现

                                              2.4不死神兔【应用】

                                              2.4.1案例需求

                                              有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子, 假如兔子都不死,问第二十个月的兔子对数为多少?

                                              2.4.2代码实现

                                              2.5百钱白鸡【应用】

                                              2.5.1案例需求

                                              我国古代数学家张丘建在《算经》一书中提出的数学问题:鸡翁一值钱五,鸡母一值钱三,鸡雏三值钱一。 百钱买百鸡,问鸡翁、鸡母、鸡雏各几何?

                                              2.5.2代码实现

                                              2.6数组元素求和【应用】

                                              2.6.1案例需求

                                              有这样的一个数组,元素是{68,27,95,88,171,996,51,210}。求出该数组中满足要求的元素和, 要求是:求和的元素个位和十位都不能是7,并且只能是偶数

                                              2.6.2代码实现

                                              2.7判断两个数组是否相同【应用】

                                              2.7.1案例需求

                                              定义一个方法,用于比较两个数组的内容是否相同

                                              2.7.2代码实现

                                              2.8查找元素在数组中出现的索引位置【应用】

                                              2.8.1案例需求

                                              已知一个数组 arr = {19, 28, 37, 46, 50}; 键盘录入一个数据,查找该数据在数组中的索引。
                                              并在控制台输出找到的索引值。如果没有查找到,则输出-1

                                              2.8.2代码实现

                                              2.9数组元素反转【应用】

                                              2.9.1案例需求

                                              已知一个数组 arr = {19, 28, 37, 46, 50}; 用程序实现把数组中的元素值交换, 交换后的数组 arr = {50, 46, 37, 28, 19}; 并在控制台输出交换后的数组元素。

                                              2.9.2代码实现

                                              2.10评委打分【应用】

                                              2.10.1案例需求

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

                                              2.10.2代码实现