Java保姆级新手教程第三章(方法与数组)

发布于:2025-08-08 ⋅ 阅读:(19) ⋅ 点赞:(0)

一、前言❤️❤️

恭喜你掌握了Java的基础语法!上一章我们学会了用变量存数据、用运算符操作数据、用流程控制语句让程序灵活运行。现在,我们要让代码变得更有条理、可重用、能处理批量数据。本章的主角就是:方法(Method)和 数组(Array)。它们就像工具箱里的专用工具和收纳盒,能让你的代码更强大、更整洁!

二、方法:代码的“功能模块”

1. 方法是什么?为什么需要它?

想象一下,你要反复做同一个动作,比如“榨一杯橙汁”。每次都从头描述“拿橙子->去皮->切块->放榨汁机->启动->倒杯”很麻烦。不如把这个过程定义成一个叫 榨橙汁() 的动作(方法)。以后需要橙汁时,直接喊一声 榨橙汁() 就行了!

在Java中,方法就是一段用来完成特定功能的、可重复使用的代码块。

    •    好处1:代码复用 - 避免写重复的代码,一处定义,多处调用。

    •    好处2:结构清晰 - 把大问题拆解成一个个小功能(方法),程序逻辑更清晰,易于理解和维护。

    •    好处3:便于修改 - 要修改某个功能,只需修改对应方法内部,不影响其他地方。

2. 方法的定义与语法

定义一个方法,就像定义一个“动作指令”。基本语法如下:


    •    访问修饰符 (如 public): 控制谁可以访问这个方法(常用 public 表示哪里都能访问,后续面向对象详解)。

 

    •    static (可选): 表示这是一个“静态方法”,在 main 方法中直接调用其他方法,通常需要它们都是 static 的(目前先记住,面向对象会深入理解)。

    •    返回值类型: 方法执行后返回的结果的数据类型。

    ◦    如果方法不返回任何结果,用关键字 void。

    ◦    如果方法有返回值,必须用 return 语句返回一个该类型的值。

    •    方法名: 给方法起的名字,要符合标识符规则(驼峰命名法,见名知意,如 calculateSum, printWelcomeMessage)。

    •    参数列表 (可选): 方法执行时需要的输入信息。写在括号 () 里,用逗号分隔。每个参数需要指定类型和名称。没有参数时写空括号 ()。

    •    方法体 {}: 包含实现方法功能的Java语句。

    •    return 语句 (非 void 方法必需): 用于结束方法,并将结果返回给调用者。void 方法可以用 return; 提前结束(不返回值),或者省略。

3. 方法的调用

定义了方法,不调用它就不会执行。调用方法很简单:


    •    实参 (实际参数): 调用方法时,传递给方法参数的具体值。实参的类型、数量和顺序必须与定义方法时的形参(形式参数)一致。

 

4. 方法示例详解

示例1:无参数无返回值 (void) 方法:

示例2:带参数无返回值 (void) 方法:



示例3:带参数有返回值的方法:



5. 方法的重载 (Overloading)

Java允许在同一个类中定义多个同名的方法,只要它们的参数列表不同(参数个数、类型或顺序不同)。这叫做方法重载。

    •    作用:提高方法名的可读性,处理不同类型或数量的数据。

    •    与返回值无关:仅返回值类型不同,不能构成重载!编译器会报错。


三、数组:数据的“集体宿舍”

1. 数组是什么?为什么需要它?

想象你要记录全班50个同学的成绩。如果定义50个 int 变量 (score1, score2, ..., score50),管理起来简直是噩梦!

数组 就是用来存储固定大小的、相同类型元素的“容器”。它像一排连续的格子间(内存单元),每个格子放一个数据,通过索引(下标)来访问。

    •    好处:方便批量处理相同类型的数据(遍历、计算总和/平均值、排序、查找等)。

2. 数组的声明与初始化

声明数组:


例如:


初始化数组: 声明数组后,必须初始化(分配内存空间并赋值)才能使用。

    •    动态初始化:只指定数组长度,由系统分配空间并赋默认值。

    ◦    语法:数组名 = new 数据类型[数组长度];

    ◦    默认值:整数(0), 浮点数(0.0), 布尔(false), 字符(\u0000), 引用类型(null)。

 •    静态初始化:在创建数组的同时,直接指定元素的值。

    ◦    语法:数据类型[] 数组名 = new 数据类型[]{元素1, 元素2, ..., 元素n};

    ◦    简化语法:数据类型[] 数组名 = {元素1, 元素2, ..., 元素n}; (只能在声明时使用)


3. 访问数组元素

    •    通过索引(下标)访问数组元素。索引从 0 开始,到 数组长度 - 1 结束。

    •    语法:数组名[索引]

重要属性:length
每个数组都有一个 length 属性,表示数组的长度(元素个数)。length 是属性,不是方法,后面没有括号 ()!


4. 遍历数组

 处理数组元素最常用的方式就是遍历(循环访问每个元素)。

    •    使用 for 循环:(最常用、最灵活)

•    使用 for-each 循环 (增强for循环):(简洁,适合只读遍历)

    ◦    语法:for (元素类型 变量名 : 数组名) { ... }

    ◦    优点:不需要索引,直接操作元素值;语法简洁。

    ◦    缺点:无法直接获取当前元素的索引;无法修改数组元素本身的值(对于基本类型数组,修改的是循环变量副本;对于引用类型数组,可以修改对象的属性)。

5. 多维数组

数组的元素也可以是数组,这样就形成了多维数组。最常见的是二维数组(想象成一个表格)。

    •    声明与初始化:
// 动态初始化:声明一个3行4列的二维数组
int[][] matrix = new int[3][4]; 

// 静态初始化:

•    访问元素:使用两个索引 [行索引][列索引]


    •    遍历二维数组:嵌套循环:


 

四、Arrays 工具类 (java.util.Arrays)

Java提供了一个非常实用的 Arrays 类(在 java.util 包中),包含了很多操作数组的静态方法(如排序、搜索、比较、填充、转换为字符串等)。

    •    常用方法:

    ◦    Arrays.toString(数组):将数组内容转换为格式化的字符串,方便打印查看。System.out.println(数组名) 打印的是数组的内存地址(如 [I@1b6d3586),通常没用!用 Arrays.toString() 才是看内容。

    ◦    Arrays.sort(数组):对数组进行升序排序(原地修改原数组)。

    ◦    Arrays.binarySearch(数组, 要查找的值):在已排序的数组中用二分查找法查找指定元素,返回索引(找到)或负数(未找到)。

    ◦    Arrays.fill(数组, 值):用指定值填充整个数组。

    ◦    Arrays.copyOf(原数组, 新长度):复制数组,可以指定新长度(截断或用默认值填充)。

    ◦    Arrays.equals(数组1, 数组2):比较两个数组内容是否相等。

示例:


五、本章总结 & 实战演练

1. 知识梳理

    •    方法:代码的“功能模块”。掌握定义(返回值、参数、方法体)、调用(传参)、重载(同名不同参)。方法是构建复杂程序的基石。

    •    数组:数据的“集体宿舍”。掌握声明、动态/静态初始化、访问元素(索引从0开始)、length属性、遍历(for循环和for-each循环)、多维数组(尤其是二维数组)。

    •    Arrays工具类:学会使用 toString()、sort()、binarySearch() 等常用方法简化数组操作。记住打印数组内容要用 Arrays.toString()!

2. 必做练习 (动手!动手!动手!)❤️

    •    方法练习:

    1.    写一个方法 isEven(int number),判断一个整数是否是偶数,返回 boolean 值。在 main 方法中调用测试。

    2.    写一个方法 findMax(int[] array),接收一个整数数组,返回数组中的最大值。

    3.    写一个重载方法 printArea():

    ◦    printArea(double radius):计算并打印圆的面积(π*r²)。

    ◦    printArea(double length, double width):计算并打印矩形的面积。

    ◦    在 main 方法中分别调用测试。

    •    数组练习:

    1.    创建一个包含10个随机整数(1-100)的数组。使用 Arrays.toString() 打印它。计算并打印这些数的总和与平均值。

    2.    复制练习1的数组到新数组。对新数组进行排序 (Arrays.sort()),然后打印排序后的数组。尝试在排序后的数组中查找某个数 (Arrays.binarySearch())。

    3.    创建一个二维数组 int[][] grades 存储3个学生4门课的成绩(自己设定成绩值)。

    ◦    使用嵌套循环计算并打印每个学生的平均分。

    ◦    使用嵌套循环计算并打印每门课的平均分。

    ◦    (挑战) 找出所有学生中单科最高分是哪门课多少分?哪个学生?

    •    综合小项目:

    ◦    简易计算器:写一个 calculate 方法,接收两个 double 操作数和一个 char 运算符 ('+', '-', '*', '/'),返回计算结果。在 main 方法中用循环让用户输入数字和运算符,调用 calculate 方法计算并显示结果,直到用户输入 'q' 退出。注意处理除法除数为0的情况!

    ◦    学生成绩分析器:定义一个 Student 类(暂时只包含 String name 和 int[] scores 属性)。在 main 方法中创建一个 Student 数组,存储几个学生的信息和几门课的成绩。编写方法实现:

    ◦    打印所有学生的信息(包括各科成绩)。

    ◦    计算并打印每个学生的总分和平均分。

    ◦    找出某门课(比如第1门课)的最高分和对应的学生姓名。

    ◦    (挑战) 按学生的平均分进行降序排序并打印排名。

六、结语 & 预告❤️❤️

恭喜你!掌握了方法和数组,你已经具备了用Java组织代码和处理批量数据的能力。代码不再是零散的片段,而是可以模块化组合、处理复杂任务的工具了。

下一章,我们将深入面向对象编程(OOP)的核心世界!你将学会如何创建自己的“蓝图”(类),用蓝图制造具体的“物品”(对象),理解封装、继承、多态这三大支柱。这是Java强大和优雅的关键所在,准备好迎接思想的飞跃吧!

记得哦:编程是门实践的艺术,光看不动手等于没学!一定要把本章的练习都敲一遍代码!遇到问题随时回顾教程或搜索资料(善用 System.out.println 调试!)。加油!💕


网站公告

今日签到

点亮在社区的每一天
去签到