前言
前面我们写代码时,很多重复逻辑(比如求数组和、遍历数组)会反复复制粘贴,代码冗余、不好维护。在 Java 中,我们可以把一段具备独立功能、可以重复使用的代码块 封装起来,这就是方法。
方法作用:代码复用、简化结构、便于阅读和维护。main 方法就是 Java 自带的入口方法。
一、方法的定义
1. 语法格式
java
修饰符 返回值类型 方法名(参数列表){
// 方法体:实现功能的代码
return 返回值; // 有返回值才需要写
}
逐个解释:
- 修饰符 :控制访问权限,初学先用
public static(方便直接在main调用) - 返回值类型 :方法执行完返回结果的数据类型;没有返回值写 void
- 方法名:小驼峰命名,见名知意,例如 getSum、printArray
- 参数列表 :
类型1 参数名1, 类型2 参数名2,是方法需要外界传入的数据;不需要参数就留空 - return :①结束当前方法;②把结果返回给调用处。void方法里可以写
return;用来提前结束,不能带数据。
2. 两种方法分类
- 有参数、有返回值:接收数据,计算后返回结果(最常用)
- 无参数、无返回值:只做动作,不需要接收数据、不需要返回结果
示例1:无参无返回值
java
public static void sayHello(){
System.out.println("Hello Java方法");
}
示例2:有参有返回值(求两个整数之和)
java
public static int getSum(int a, int b){
int sum = a + b;
return sum;
}
✅ 注意:方法不能嵌套定义!不能在一个方法里面再写另一个方法,所有方法平级,写在类中。
二、方法的调用
方法定义好之后,不会自动执行,只有调用才会执行 。 格式:方法名(实参);
-
形参:方法定义时,括号里的变量(形式参数)
-
实参:调用方法时,传入的真实数据(实际参数)
实参和形参要求:数量一致、顺序一致、类型匹配
完整演示代码:
java
public class MethodDemo {
public static void main(String[] args) {
// 调用无参方法
sayHello();
// 调用有返回值方法,可以接收返回结果
int res = getSum(10,20);
System.out.println("和为:" + res);
// 也可以直接打印,不接收变量
System.out.println(getSum(66,34));
}
public static void sayHello(){
System.out.println("Hello Java方法");
}
public static int getSum(int a, int b){
int sum = a + b;
return sum;
}
}
执行顺序:main方法启动 → 遇到方法调用,跳转到目标方法执行 → 方法执行完毕,回到调用位置继续往下执行。
三、参数传递(基础)
Java中基础数据类型(int、double、boolean、char等)传递的是值拷贝: 方法内部修改形参的值,不会影响外面实参变量本身。 示例:
java
public static void changeNum(int num){
num = 100;
System.out.println("方法内num:"+num);
}
public static void main(String[] args) {
int a = 10;
changeNum(a);
System.out.println("main中a:"+a); // 输出依旧是10
}
数组、对象属于引用类型,传递的是地址值,方法内修改数组元素,外面数组会跟着变(后续单独讲解)。
四、return关键字细节
- 有返回值的方法,必须保证所有分支都有return,否则编译报错
return 数据;:结束方法,同时带回结果- void方法中,允许单独写
return;,用来提前终止方法,后面代码不再执行
java
public static void test(int num){
if(num < 0){
System.out.println("负数,直接结束");
return;
}
System.out.println("正常执行");
}
五、方法重载(overload)
1. 什么是重载
在同一个类中,多个方法名字相同,参数列表不同,就是方法重载。 好处:同一个功能,方法名统一,调用简单,不用记很多名字。
判断重载的核心规则: ✅ 方法名必须相同 ✅ 参数列表必须不同:参数个数不同 / 参数类型不同 / 参数顺序不同 ❌ 和返回值类型无关、和参数名字无关!不能只靠返回值区分重载
示例:重载求和方法
java
public class OverLoadDemo {
public static void main(String[] args) {
System.out.println(getSum(1,2));
System.out.println(getSum(1.1,2.2));
System.out.println(getSum(1,2,3));
}
// 两个int求和
public static int getSum(int a, int b){
return a + b;
}
// 两个double求和,参数类型不同 → 重载
public static double getSum(double a, double b){
return a + b;
}
// 三个int求和,参数个数不同 → 重载
public static int getSum(int a, int b, int c){
return a + b + c;
}
}
调用时,编译器会根据你传入实参的个数、类型自动匹配对应的重载方法。
常见误区
java
// 这两个不是重载!仅仅返回值不一样,参数列表完全一样,编译报错
public static int test(){return 1;}
public static double test(){return 1.0;}
六、综合小案例:封装求数组最大值的方法
java
public class MethodCase {
public static void main(String[] args) {
int[] arr = {12,45,7,99,23};
int max = getMax(arr);
System.out.println("数组最大值:" + max);
}
// 参数:int数组,返回数组最大值
public static int getMax(int[] array){
int max = array[0];
for (int i = 1; i < array.length; i++) {
if(array[i] > max){
max = array[i];
}
}
return max;
}
}
运行结果

七、易错点总结
- 方法不能写在方法内部,只能写在类里面
- 有返回值的方法,return不能省略,返回的数据类型要匹配声明的返回值类型
- 实参、形参类型、数量、顺序要对应
- 重载只看【方法名+参数列表】,返回值不算重载区分条件
- void方法不能return具体数据
八、小结
- 方法用来封装独立功能,实现代码复用
- 组成:修饰符、返回值类型、方法名、参数列表、方法体、return
- 调用:写方法名+实参;有返回值可以接收结果
- 基础类型传值拷贝,引用类型传地址
- 方法重载:同名不同参,方便同一类功能统一调用