滚雪球学Java(36):玩转Java方法重载和可变参数,让你的代码更灵活

简介: 【5月更文挑战第11天】🏆本文收录于「滚雪球学Java」专栏,专业攻坚指数级提升,希望能够助你一臂之力,帮你早日登顶实现财富自由🚀;同时,欢迎大家关注&&收藏&&订阅!持续更新中,up!up!up!!

🏆本文收录于「滚雪球学Java」专栏,专业攻坚指数级提升,助你一臂之力,带你早日登顶🚀,欢迎大家关注&&收藏!持续更新中,up!up!up!!


前言

  在Java中,方法重载是一种简单而常见的技术,它允许我们定义拥有相同名称但参数列表不同的多个方法。这使得我们能够以更加灵活的方式实现相同的功能,同时也方便了代码的维护与扩展。

  除此之外,Java还提供了可变参数的特性,可以在参数数量不确定的情况下调用方法,这极大地增强了代码的通用性和灵活性。

  本文将介绍Java方法重载和可变参数的概念和用法,通过代码实例演示其使用方法,帮助读者更好地掌握这两个重要的Java编程技术。

摘要

本文将主要介绍以下内容:

  • 方法重载的概念和用法
  • 可变参数的概念和用法
  • 代码实例演示

正文

方法重载的概念和用法

  方法重载是指在一个类中定义多个方法,它们具有相同的方法名但参数列表不同。在Java中,方法重载可以使用不同的参数数量、类型或顺序进行定义。

下面是一个简单的例子:

public class Calculator {
   
   
    public int add(int a, int b) {
   
   
        return a + b;
    }

    public int add(int a, int b, int c) {
   
   
        return a + b + c;
    }
}

  在这个例子中,我们定义了一个名为add的方法,但它带有不同数量参数的不同版本。这使得我们能够以更加灵活的方式实现相同的功能。

  Java编译器会根据调用时的参数类型、数量和顺序自动选择合适的版本。比如:

Calculator calculator = new Calculator();
int sum1 = calculator.add(10, 20); // 调用 add(int a, int b) 方法
int sum2 = calculator.add(10, 20, 30); // 调用 add(int a, int b, int c) 方法

  需要注意的是,在方法重载中,方法名相同但是参数列表不同的方法对于编译器而言是不同的。因此,重载的方法应该被视为完全不同的方法,与彼此之间没有任何联系。

可变参数的概念和用法

  可变参数是指在方法中定义一个参数,其个数可以是任意的,Java编译器将其视为一个数组。在Java中,可变参数使用三个点(...)来表示。

下面是一个简单的例子:

public class Calculator {
   
   
    public int add(int... numbers) {
   
   
        int sum = 0;
        for (int number : numbers) {
   
   
            sum += number;
        }
        return sum;
    }
}

  在这个例子中,我们定义了一个名为add的方法,它带有一个可变参数numbers,可以接收任意数量的整型参数。在方法体中,我们使用循环计算了所有参数的和。

  我们可以在调用时将任意数量的参数传递给该方法,如下所示:

Calculator calculator = new Calculator();
int sum1 = calculator.add(10, 20); // 30
int sum2 = calculator.add(10, 20, 30); // 60
int sum3 = calculator.add(10, 20, 30, 40); // 100

  在调用时,我们可以向可变参数传递任意多个参数,编译器会自动将这些参数封装为一个数组,作为实际参数传递给方法。

  需要注意的是,可变参数必须是方法的最后一个参数。因为在调用时,Java编译器会优先匹配之前的参数,并将剩余的参数封装为一个数组,作为可变参数传递给方法。

代码实例演示

下面是一个完整的示例,演示了Java方法重载和可变参数的用法。

public class Calculator {
   
   
    public int add(int a, int b) {
   
   
        return a + b;
    }

    public int add(int a, int b, int c) {
   
   
        return a + b + c;
    }

    public int add(int... numbers) {
   
   
        int sum = 0;
        for (int number : numbers) {
   
   
            sum += number;
        }
        return sum;
    }

    public static void main(String[] args) {
   
   
        Calculator calculator = new Calculator();
        int sum1 = calculator.add(10, 20); // 调用 add(int a, int b) 方法
        int sum2 = calculator.add(10, 20, 30); // 调用 add(int a, int b, int c) 方法
        int sum3 = calculator.add(10, 20, 30, 40); // 调用 add(int... numbers) 方法
        System.out.println("sum1 = " + sum1); // sum1 = 30
        System.out.println("sum2 = " + sum2); // sum2 = 60
        System.out.println("sum3 = " + sum3); // sum3 = 100
    }
}

  在这个示例中,我们定义了三个重载的方法add,分别接收不同数量的参数。在main方法中,我们分别调用了三个方法,并打印结果。由于Java编译器会自动匹配方法的参数类型和数量,在调用时我们不需要显式地指定使用哪个版本的方法。

小结

  方法重载和可变参数是Java中常见的编程技巧,能够使我们以更加优雅和灵活的方式实现代码功能。重载的方法应该被视为完全不同的方法,不能互相调用或者继承。可变参数必须是方法的最后一个参数,其个数可以是任意的。在调用时,编译器会自动将可变参数封装为数组,作为实际参数传递给方法。

附录源码

  如上涉及所有源码均已上传同步在 Gitee,提供给同学们一对一参考学习,辅助你更迅速的掌握。

☀️建议/推荐你


  无论你是计算机专业的学生,还是对编程有兴趣的小伙伴,都建议直接毫无顾忌的学习此专栏「滚雪球学Java」,bug菌郑重承诺,凡是学习此专栏的同学,均能获取到所需的知识和技能,全网最快速入门Java编程,就像滚雪球一样,越滚越大,指数级提升。

目录
相关文章
|
17天前
|
Java API 开发工具
【Azure Developer】Java代码实现获取Azure 资源的指标数据却报错 "invalid time interval input"
在使用 Java 调用虚拟机 API 获取指标数据时,因本地时区设置非 UTC,导致时间格式解析错误。解决方法是在代码中手动指定时区为 UTC,使用 `ZoneOffset.ofHours(0)` 并结合 `withOffsetSameInstant` 方法进行时区转换,从而避免因时区差异引发的时间格式问题。
112 3
|
26天前
|
缓存 Java 开发者
Java 开发者必看!ArrayList 和 LinkedList 的性能厮杀:选错一次,代码慢成蜗牛
本文深入解析了 Java 中 ArrayList 和 LinkedList 的性能差异,揭示了它们在不同操作下的表现。通过对比随机访问、插入、删除等操作的效率,指出 ArrayList 在多数场景下更高效,而 LinkedList 仅在特定情况下表现优异。文章强调选择合适容器对程序性能的重要性,并提供了实用的选择法则。
101 3
|
29天前
|
人工智能 监控 安全
智慧工地解决方案,java智慧工地程序代码
智慧工地系统融合物联网、AI、大数据等技术,实现对施工现场“人、机、料、法、环”的全面智能监控与管理,提升安全、效率与决策水平。
|
1月前
|
算法 IDE Java
Java 项目实战之实际代码实现与测试调试全过程详解
本文详细讲解了Java项目的实战开发流程,涵盖项目创建、代码实现(如计算器与汉诺塔问题)、单元测试(使用JUnit)及调试技巧(如断点调试与异常排查),帮助开发者掌握从编码到测试调试的完整技能,提升Java开发实战能力。
255 0
|
2月前
|
安全 Java 测试技术
Java 项目实战中现代技术栈下代码实现与测试调试的完整流程
本文介绍基于Java 17和Spring技术栈的现代化项目开发实践。项目采用Gradle构建工具,实现模块化DDD分层架构,结合Spring WebFlux开发响应式API,并应用Record、Sealed Class等新特性。测试策略涵盖JUnit单元测试和Testcontainers集成测试,通过JFR和OpenTelemetry实现性能监控。部署阶段采用Docker容器化和Kubernetes编排,同时展示异步处理和反应式编程的性能优化。整套方案体现了现代Java开发的最佳实践,包括代码实现、测试调试
131 0
|
2月前
|
Java 编译器 数据库连接
Java异常处理:写出更健壮的代码
Java异常处理:写出更健壮的代码
158 0
|
Java 数据安全/隐私保护
Java代码的执行顺序和构造方法
构造方法是类的一种特殊方法,用于初始化新对象。在 Java 中,每个类默认都有一个与类名同名的构造方法,无需返回类型。构造方法不能用 static、final、synchronized、abstract 或 native 修饰。它可以重载,通过不同的参数列表实现多种初始化方式。构造方法在对象实例化时自动调用,若未显式声明,默认提供一个无参构造方法。构造代码块和静态代码块分别用于对象和类的初始化,按特定顺序执行。
114 0
|
Java
Java代码的执行顺序
Java代码的执行顺序
119 1
LearnJava(四) | Java代码块执行顺序测试
最近笔试常常遇到考察Java代码块执行顺序的题目,网上查看博客错漏百出,特地自己测试了一下。 如有错漏,希望路过的大佬指出来,以便我进行更改。   先上代码吧! public class ClassA { private static St...
1006 0