【Java 语言】— 方法(方法定义、调用、参数、返回值、方法重载)

前言

前面我们写代码时,很多重复逻辑(比如求数组和、遍历数组)会反复复制粘贴,代码冗余、不好维护。在 Java 中,我们可以把一段具备独立功能、可以重复使用的代码块 封装起来,这就是方法。

方法作用:代码复用、简化结构、便于阅读和维护。main 方法就是 Java 自带的入口方法。

一、方法的定义

1. 语法格式

java 复制代码
修饰符 返回值类型 方法名(参数列表){
    // 方法体:实现功能的代码
    return 返回值; // 有返回值才需要写
}

逐个解释:

  • 修饰符 :控制访问权限,初学先用 public static(方便直接在main调用)
  • 返回值类型 :方法执行完返回结果的数据类型;没有返回值写 void
  • 方法名:小驼峰命名,见名知意,例如 getSum、printArray
  • 参数列表 :类型1 参数名1, 类型2 参数名2,是方法需要外界传入的数据;不需要参数就留空
  • return :①结束当前方法;②把结果返回给调用处。void方法里可以写return;用来提前结束,不能带数据。

2. 两种方法分类

  1. 有参数、有返回值:接收数据,计算后返回结果(最常用)
  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关键字细节

  1. 有返回值的方法,必须保证所有分支都有return,否则编译报错
  2. return 数据;:结束方法,同时带回结果
  3. 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;
    }
}

运行结果

七、易错点总结

  1. 方法不能写在方法内部,只能写在类里面
  2. 有返回值的方法,return不能省略,返回的数据类型要匹配声明的返回值类型
  3. 实参、形参类型、数量、顺序要对应
  4. 重载只看【方法名+参数列表】,返回值不算重载区分条件
  5. void方法不能return具体数据

八、小结

  1. 方法用来封装独立功能,实现代码复用
  2. 组成:修饰符、返回值类型、方法名、参数列表、方法体、return
  3. 调用:写方法名+实参;有返回值可以接收结果
  4. 基础类型传值拷贝,引用类型传地址
  5. 方法重载:同名不同参,方便同一类功能统一调用
相关推荐
CodeGL1 小时前
16、Python Web开发
开发语言·前端·python
喵了几个咪1 小时前
GoWind UBA 拆解:把 Doris UNIQUE KEY 翻译成 ClickHouse——读数正确性对齐实录
开发语言·后端·clickhouse·微服务·golang·gowind
FRing031 小时前
JavaScript入门到精通二十九(内置构造函数(Object、Array))
开发语言·前端·javascript
syagain_zsx1 小时前
ODB 与 MySQL:C++ 里的 ORM 实践(类即表、事务铁律与查询封装)
开发语言·数据库·c++·mysql·工具库·1024程序员节
Wang's Blog1 小时前
Java 项目实战: 交友项目 - 查询评论列表
java·交友
小嘉丶学长1 小时前
Day08 · 字符串(二)
服务器·开发语言·python·学习·1024程序员节
sycmancia2 小时前
Qml——Text元素
java·前端·html
T_Apollo2 小时前
3.1 JVM 工作原理
java
Java内核笔记2 小时前
同一份知识库,4 种切分 × 3 种召回,纯关键词比纯向量高 13 个点
java·人工智能·spring boot