Java基础入门:方法详解
Java基础入门:方法详解
前言:掌握了Java变量、运算符、流程控制和数组后,你可能会遇到一个问题——重复编写相同的代码,比如多次计算两个数的和、多次打印数组元素,既繁琐又冗余。而「方法」就是Java中用来实现“代码复用”的核心工具,相当于把一段常用的代码“封装”起来,需要时直接调用,不用重复编写。这篇文章全程避开复杂术语,用「生活化类比+可直接运行的代码案例」,把Java方法的定义、调用、参数、返回值和新手避坑点讲透,每个案例都带详细注释,新手跟着敲一遍就能掌握,复制粘贴就能在CSDN发布,助力你提升代码编写效率,夯实Java基础!
温馨提示:所有代码均适配JDK8及以上版本,可直接复制到IDEA、Eclipse等Java编辑器运行,报错可评论区留言,逐一解答;建议结合前四篇(变量、运算符、流程控制、数组)一起学习,衔接更顺畅,理解更轻松~
一、先搞懂:什么是Java方法?
1. 通俗理解
方法就像「一个提前写好的“工具函数”」—— 比如我们常用的“计算器”,里面有“加法”“减法”功能,我们不需要知道计算器内部怎么实现的,只要输入数字,点击“加法”按钮,就能得到结果。
类比到Java中:方法是「一段封装好的、可重复调用的代码块」,用来完成特定的功能(比如计算两个数的和、打印数组、查找最大值)。我们只需要定义一次方法,后续需要使用这个功能时,直接调用方法即可,不用重复编写这段代码。
比如:我们定义一个“计算两个int类型数字之和”的方法,后续无论需要计算多少次两个数的和,直接调用这个方法,传入两个数字,就能得到结果,无需重复编写“a + b”的逻辑。
2. 方法的核心作用
-
- 代码复用:定义一次,多次调用,减少冗余代码(最核心作用);
-
- 代码模块化:把复杂功能拆分成多个方法,代码结构更清晰,便于阅读和维护;
-
- 降低复杂度:每个方法只做一件事,比如“计算和”“打印结果”,单独实现,逻辑更简单。
3. 生活类比
比如做蛋糕:
-
定义方法1:「揉面团」(封装“揉面团”的步骤,需要时调用);
-
定义方法2:「烤蛋糕」(封装“烤蛋糕”的步骤,需要时调用);
-
定义方法3:「装饰蛋糕」(封装“装饰”的步骤,需要时调用);
做蛋糕时,不需要重复写“揉面团、烤蛋糕”的步骤,直接调用对应的方法即可,这就是方法的核心价值——复用、模块化。
二、方法的定义与调用(核心步骤,必掌握)
使用方法分为两步:先「定义方法」(编写方法的代码块,确定方法的功能),再「调用方法」(使用方法,执行方法中的代码)。新手重点掌握最基础的方法定义格式,后续逐步进阶。
1. 方法的定义格式
Java中方法的定义有固定格式,核心包含5个部分:修饰符、返回值类型、方法名、参数列表、方法体。
基础格式(新手入门常用,修饰符用public static):
// 方法定义格式
public static 返回值类型 方法名(参数列表) {
// 方法体:实现方法功能的代码块(比如计算、打印)
代码语句;
// 若返回值类型不是void,需用return返回结果
return 返回值;
}
逐一部分解读(新手易懂,不用死记,结合案例理解):
-
修饰符:public static(新手固定写法,后续进阶再讲解其他修饰符);
-
返回值类型:方法执行完毕后,是否返回结果。如果返回结果,写对应的数据类型(比如int、double);如果不返回结果,写void(重点);
-
方法名:给方法起一个名字,遵循驼峰命名法(首字母小写,后续单词首字母大写,比如addNum、printArray),见名知意;
-
参数列表:方法执行时,需要传入的“原材料”(比如计算两个数的和,需要传入两个数字),格式:数据类型 参数名1, 数据类型 参数名2,…(无参数则括号内留空);
-
方法体:实现方法功能的核心代码,写在大括号内;
-
return:如果返回值类型不是void,必须用return返回一个和返回值类型一致的结果;如果是void,return可省略(或只写return; 表示结束方法)。
2. 新手必学:两种基础方法(无参数无返回值、有参数有返回值)
新手先掌握两种最常用的方法类型,覆盖80%的入门场景,后续再学习其他类型。
(1)无参数、无返回值方法(void)
适用场景:不需要传入参数,也不需要返回结果,只需要执行一段代码(比如打印欢迎语、打印固定内容)。
// 无参数、无返回值方法案例
public class MethodDemo1 {
public static void main(String[] args) {
// 调用方法:方法名();
printWelcome(); // 调用printWelcome方法,执行方法体中的代码
printLine(); // 调用printLine方法
}
// 定义无参数、无返回值方法:打印欢迎语
public static void printWelcome() {
System.out.println("欢迎学习Java方法!");
System.out.println("方法可以实现代码复用~");
// 返回值类型是void,可省略return
}
// 定义无参数、无返回值方法:打印分割线
public static void printLine() {
System.out.println("------------------------");
}
}
运行结果:
欢迎学习Java方法!
方法可以实现代码复用~
重点:无参数方法调用时,括号内留空;无返回值方法(void),方法体中可以不用return。
(2)有参数、有返回值方法
适用场景:需要传入参数(原材料),执行后返回结果(比如计算两个数的和、计算数组的最大值),是最常用的方法类型。
// 有参数、有返回值方法案例:计算两个int类型数字的和
public class MethodDemo2 {
public static void main(String[] args) {
// 调用有参数、有返回值方法:方法名(参数1, 参数2,...)
// 用变量接收返回值(也可以直接打印)
int sum1 = addNum(10, 20); // 传入参数10和20,接收返回的和
int sum2 = addNum(30, 40);
System.out.println("10+20的和:" + sum1); // 输出:30
System.out.println("30+40的和:" + sum2); // 输出:70
// 直接打印返回值,不接收
System.out.println("50+60的和:" + addNum(50, 60)); // 输出:110
}
// 定义有参数、有返回值方法:计算两个int数字的和
// 参数列表:int a(第一个数字)、int b(第二个数字)
// 返回值类型:int(返回的和是int类型)
public static int addNum(int a, int b) {
int sum = a + b; // 方法体:计算两个数的和
return sum; // 返回计算结果(sum是int类型,和返回值类型一致)
}
}
重点:调用有参数方法时,传入的参数个数、数据类型,必须和方法定义的参数列表一致(比如addNum方法需要两个int参数,不能传入一个参数,也不能传入String参数);返回值必须用对应类型的变量接收,或直接打印。
3. 方法调用的核心注意事项
-
避坑1:方法必须先定义,再调用(不能先调用,后定义),比如在main方法中调用addNum,addNum方法必须写在main方法之前,或写在同一个类中(后续会学类的知识,新手先记住同个类即可);
-
避坑2:有参数方法调用时,参数类型、个数必须和定义一致,比如addNum(int a, int b),不能调用addNum(10.5, 20)(参数类型不匹配);
-
避坑3:有返回值方法,必须用return返回结果,且返回值类型必须和定义的一致,比如返回值类型是int,不能返回String;
-
避坑4:方法不能嵌套定义(不能在一个方法内部,再定义另一个方法),比如不能在addNum方法中,再定义printLine方法。
// 方法调用避坑案例
public class MethodPitfall1 {
public static void main(String[] args) {
// 避坑1:先调用,后定义(报错)
// sum = addNum(10,20);
// 正确:先定义,再调用
int sum = addNum(10,20);
System.out.println(sum);
}
// 定义addNum方法(在main方法之后,也可以,只要先定义)
public static int addNum(int a, int b) {
return a + b;
}
// 避坑4:方法嵌套定义(报错)
// public static void test() {
// public static void test2() { // 不能在test方法内部定义test2方法
// System.out.println("测试");
// }
// }
}
三、方法的参数详解
方法的参数分为「形参」和「实参」,新手容易混淆,用通俗的语言讲透,结合案例理解,就能轻松区分。
1. 形参(形式参数)
定义方法时,括号内的参数就是形参,相当于“方法的占位符”,用来接收调用方法时传入的实参。
比如:addNum(int a, int b) 中的 a 和 b,就是形参,它们只是占位符,没有具体的值,只有调用方法时,传入实参后,形参才会有具体的值。
2. 实参(实际参数)
调用方法时,括号内传入的具体值(或变量),就是实参,用来给形参赋值。
比如:addNum(10, 20) 中的 10 和 20,就是实参;addNum(num1, num2) 中的 num1 和 num2(提前定义的变量),也是实参。
3. 形参和实参的关系(核心)
调用方法时,实参的值会“传递”给形参,形参的值在方法体中使用,方法执行完毕后,形参的值会被销毁,不影响实参的值(新手重点理解:形参是实参的“副本”)。
// 形参和实参案例
public class MethodParam {
public static void main(String[] args) {
int num1 = 10;
int num2 = 20;
// 调用方法:实参是num1和num2,传递给形参a和b
int sum = addNum(num1, num2);
System.out.println("实参num1的值:" + num1); // 输出:10(实参值不变)
System.out.println("实参num2的值:" + num2); // 输出:20(实参值不变)
System.out.println("方法返回的和:" + sum); // 输出:30
}
// 形参a和b,接收实参num1和num2的值
public static int addNum(int a, int b) {
a = a + 5; // 修改形参a的值
b = b + 5; // 修改形参b的值
return a + b; // 返回修改后的和
}
}
运行结果说明:方法中修改了形参a和b的值,但实参num1和num2的值没有变化,因为形参是实参的副本,修改副本不会影响原始值。
4. 新手避坑(参数相关)
-
避坑1:形参的名字和实参的名字可以相同,也可以不同,不影响参数传递(比如形参是a、b,实参也可以是a、b);
-
避坑2:参数传递时,只能是“实参给形参赋值”,不能反过来(形参的值不能影响实参);
-
避坑3:多个参数时,顺序不能错,比如方法定义是addNum(int a, int b)(a是第一个数,b是第二个数),调用时不能写成addNum(20, 10)(除非需求是交换顺序)。
四、方法的返回值详解
返回值是方法执行完毕后,返回给调用者的结果,新手重点掌握3个核心点,避免返回值错误。
1. 返回值的核心规则
-
- 若方法的返回值类型是void(无返回值),方法体中可以不用return,或只写return;(表示结束方法,后续代码不执行);
-
- 若方法的返回值类型不是void(比如int、double),方法体中必须有return语句,且return后面的返回值,数据类型必须和定义的返回值类型一致;
-
- return语句执行后,方法会立即结束,return后面的代码不会执行(新手容易忽略)。
// 返回值案例(含避坑)
public class MethodReturn {
public static void main(String[] args) {
int result1 = getMax(10, 20);
System.out.println("最大值:" + result1); // 输出:20
printInfo(); // 调用无返回值方法
}
// 有返回值方法:返回两个数的最大值
public static int getMax(int a, int b) {
if (a > b) {
return a; // 返回a,方法结束,后续代码不执行
// System.out.println("这行代码不会执行"); // 报错(return后面不能有代码)
} else {
return b; // 返回b,和返回值类型int一致
}
}
// 无返回值方法(void),用return结束方法
public static void printInfo() {
System.out.println("开始执行方法");
return; // 结束方法,后续代码不执行
// System.out.println("这行代码不会执行");
}
}
2. 新手避坑(返回值相关)
-
避坑1:有返回值方法,不能没有return语句(比如返回值类型是int,方法体中没有return,会报错);
-
避坑2:return后面的返回值类型,必须和方法定义的返回值类型一致(比如返回值类型是int,不能return “abc”);
-
避坑3:return语句不能写在if语句的分支中,导致某些情况下没有return(比如getMax方法中,if分支有return,else分支没有,会报错);
-
避坑4:无返回值方法(void),不能用return返回具体值(比如return 10; 会报错),只能写return; 或省略。
五、方法的实际应用场景
结合前四篇的数组、流程控制等知识点,整理3个新手高频应用场景,代码可直接复制运行,套用即可解决实际问题,同时体会方法的“代码复用”价值。
场景1:定义方法,打印数组中的所有元素(复用打印逻辑)
// 方法应用:打印数组元素
public class MethodArray1 {
public static void main(String[] args) {
int[] scores1 = {88, 92, 79, 95, 85};
int[] scores2 = {77, 89, 90, 83};
// 调用方法,打印两个数组,无需重复编写打印代码
printArray(scores1);
printArray(scores2);
}
// 定义方法:打印int类型数组的所有元素
// 参数:int[] arr(需要打印的数组)
// 返回值:void(只打印,不返回结果)
public static void printArray(int[] arr) {
System.out.println("数组中的元素:");
for (int num : arr) {
System.out.print(num + " ");
}
System.out.println("\n------------------------");
}
}
场景2:定义方法,计算数组中所有元素的平均值(复用计算逻辑)
// 方法应用:计算数组平均值
public class MethodArray2 {
public static void main(String[] args) {
int[] scores1 = {88, 92, 79, 95, 85};
int[] scores2 = {77, 89, 90, 83, 91, 86};
// 调用方法,计算两个数组的平均值,接收返回值并打印
double avg1 = getArrayAverage(scores1);
double avg2 = getArrayAverage(scores2);
System.out.println("第一个数组的平均值:" + avg1); // 输出:87.8
System.out.println("第二个数组的平均值:" + avg2); // 输出:86.0
}
// 定义方法:计算int数组的平均值
// 参数:int[] arr(需要计算的数组)
// 返回值:double(平均值,可能有小数)
public static double getArrayAverage(int[] arr) {
int sum = 0;
// 遍历数组,计算总和
for (int num : arr) {
sum += num;
}
// 计算平均值,转成double避免整数除法取整
return (double) sum / arr.length;
}
}
场景3:定义方法,查找数组中的最大值(复用查找逻辑)
// 方法应用:查找数组最大值
public class MethodArray3 {
public static void main(String[] args) {
int[] arr1 = {10, 20, 5, 30, 15};
int[] arr2 = {55, 33, 77, 22, 99, 44};
// 调用方法,查找两个数组的最大值
int max1 = getArrayMax(arr1);
int max2 = getArrayMax(arr2);
System.out.println("第一个数组的最大值:" + max1); // 输出:30
System.out.println("第二个数组的最大值:" + max2); // 输出:99
}
// 定义方法:查找int数组的最大值
// 参数:int[] arr(需要查找的数组)
// 返回值:int(数组的最大值)
public static int getArrayMax(int[] arr) {
int max = arr[0]; // 假设第一个元素是最大值
// 遍历数组,对比更新最大值
for (int i = 1; i < arr.length; i++) {
if (arr[i] > max) {
max = arr[i];
}
}
return max; // 返回最大值
}
}
六、新手常见报错汇总
整理了新手使用方法时,最常遇到的4种报错,附上原因和解决方案,看完少踩90%的坑!
-
报错1:method is not applicable for the arguments(方法不适用于给定的参数)
原因:调用方法时,传入的实参个数、数据类型,和方法定义的形参不匹配(比如方法需要两个int参数,只传入一个);
解决方案:检查实参的个数、数据类型,确保和形参一致。 -
报错2:missing return statement(缺少return语句)
原因:有返回值方法(非void),方法体中没有return语句,或return语句只在if分支中,某些情况下没有return;
解决方案:给有返回值方法添加return语句,确保所有分支都有return。 -
报错3:unreachable statement(无法访问的语句)
原因:return语句后面还有代码(return执行后,方法结束,后续代码无法执行);
解决方案:删除return后面的代码,或调整return的位置。 -
报错4:illegal start of expression(表达式非法)
原因:方法嵌套定义(在一个方法内部,再定义另一个方法);
解决方案:将方法定义在类中,方法之间相互独立,不能嵌套。
七、总结
Java方法的核心,新手只需掌握以下4点,就能轻松应对入门场景,实现代码复用:
-
- 方法是封装好的、可重复调用的代码块,核心作用是代码复用、模块化;
-
- 方法使用步骤:先定义(固定格式:修饰符+返回值类型+方法名+参数列表+方法体),再调用;
-
- 重点区分形参和实参:形参是方法定义时的占位符,实参是调用时传入的具体值;
-
- 返回值规则:void无返回值(可省略return),非void必须有return,且返回值类型一致。
练习建议:结合前四篇的知识点,自己定义方法——比如定义方法计算两个数的差、定义方法打印字符串、定义方法查找数组最小值,多敲多练,体会方法的复用价值。方法是Java进阶的基础,后续学习类、对象、接口等内容,都离不开方法的核心逻辑。
如果有报错、有疑问,欢迎在评论区留言,逐一解答!觉得有用的话,点赞收藏不迷路,关注我,后续持续更新Java新手基础教程,陪你从零学会Java~
更多推荐




所有评论(0)