iis服务器助手广告广告
返回顶部
首页 > 资讯 > 后端开发 > Python >Java中方法优先调用可选参数还是固定参数
  • 757
分享到

Java中方法优先调用可选参数还是固定参数

2024-04-02 19:04:59 757人浏览 安东尼

Python 官方文档:入门教程 => 点击学习

摘要

目录固定参数可选参数注意事项1.可选参数是从0到无穷2.一个方法只能有一个可选参数3.可选参数必须要放在方法最后4.可选参数和其他同名方法组成方法重载优先调用固定参数还是可选参数?结

前言:

可选参数(varargs)是 jdk 5 中新增的特性,也叫变长参数或可变参数。它是指一个方法的参数中可以用“...”来表示此方法可以接受无穷个参数,这种表示方法就叫可选参数。

可选参数的语法如下:

public void method(数据类型... 参数名称){
    // 方法体
}

可选参数基本用法如下:

public class ArgumentExample {
    public static void main(String[] args) {
        // 调用可选参数
        method("Java");
        System.out.println();
        // 调用可选参数
        method("Mysql", "Redis");
        // 调用可选参数
        System.out.println();
        method("spring", "Spring mvc", "Spring Boot");
    }
    
    public static void method(String... names) {
        for (String item : names) {
            System.out.println(item);
        }
    }
}

以上程序的执行结果如下图所示: 

固定参数

固定参数的概念恰好与可选参数相反,固定参数也就是普通的参数,一个方法中有固定的参数类型和个数且没有“...”修饰就是固定参数。JDK 5 之前所有的方法传参都是固定参数,如下代码所示:

public class ArgumentExample {
    public static void main(String[] args) {
        method("Java");
    }
    
    public static void method(String name) {
        System.out.println("固定参数:" + name);
    }
}

可选参数注意事项

可选参数在使用时要注意以下 4 个问题。

1.可选参数是从0到无穷

可选参数的调用个数是从 0 到无穷,而不是从 1 到无穷,这点需要注意一下,如以下代码所示:

public class ArgumentExample {
    public static void main(String[] args) {
        method();
    }
    
    public static void method(String... names) {
        System.out.println("可选参数数量:" + names.length);
    }
}

以上程序的执行结果如下图所示: 

 从上述代码可以看出,可选参数即使不传递任何参数,也就是 0 个参数,也是能正常调用到的。

2.一个方法只能有一个可选参数

一个方法中只能有一个可选参数,如果有多个可选参数程序会报错,如下图所示: 

3.可选参数必须要放在方法最后

可选参数如果不放在方法参数的最后面,那么编译器也会报错,如下图所示: 

4.可选参数和其他同名方法组成方法重载

可选参数和其他的同名方法可以并存,并且它们组成了方法重载,如下代码所示: 

优先调用固定参数还是可选参数?

基本知识点介绍完,接下来咱们回到本文的主题,当一个方法中有两类参数:固定参数和可选参数时,究竟是先调用固定参数呢?还是先调用可选参数呢? 接下来咱们使用一段代码来测试一下:

public class ArgumentExample {
    public static void main(String[] args) {
        method("磊哥聊编程");
    }
    
    public static void method(String name) {
        System.out.println("调用固定参数:" + name);
    }
    
    public static void method(String... names) {
        System.out.println("调用可选参数:" + names.length);
    }
}

以上程序的执行结果如下: 

结论

从上面的结果可以看出,当程序中有固定参数和可选参数时,优先调用固定参数,而非可选参数

原因分析

看到这,可能有朋友已经意识到了,如果你看过我上一篇Java中为什么不同的返回类型不算方法重载就全明白了,究竟是先调用可选参数还是固定参数?上一篇文章在介绍方法重载调用的优先级规则里已经说过了:其中可选参数的调用优先级是最低的,在固定参数和可选参数之间还有其他的调用选项。因为有些朋友没注意到,或者没看到,所以我这里再简单的回顾一下。

第1优先级:精准参数匹配

方法重载会优先调用和方法参数类型一模一样的固定参数方法。

第2优先级:调用基本类型自动转换成更大的基本类型

如果是基本数据类型,那么方法重载调用的第 2 匹配原则是自动转换成更大的基本数据类型,

如以下代码:

public class OverloadExample {
    public static void main(String[] args) {
        OverloadExample example = new OverloadExample();
        example.method(12);
    }
    public void method(long num) {
        System.out.println("调用 long 方法");
    }
    public void method(Integer num) {
        System.out.println("调用 Integer 方法");
    }
    public void method(Object num) {
        System.out.println("调用 Object 方法");
    }
    public void method(int... num) { // 可选参数
        System.out.println("调用 int... 方法");
    }
}

以上程序的执行结果如下图所示: 

第3优先级:自动装/拆箱匹配

如果存在基本类型对应的包装类型,或者是包装类型对应的基本类型的方法重载,那么会优先调用自动装箱或自动拆箱的方法重载,

以下代码所示:

public class OverloadExample {
    public static void main(String[] args) {
        OverloadExample example = new OverloadExample();
        example.method(12);
    }
    public void method(Integer num) {
        System.out.println("调用 Integer 方法");
    }
    public void method(Object num) {
        System.out.println("调用 Object 方法");
    }
    public void method(int... num) { // 可选参数
        System.out.println("调用 int... 方法");
    }
}

以上程序的执行结果如下图所示: 

第4优先级:按照继承路线依次向上匹配父类

当有父类参数时会优先调用父类重载方法,如下代码所示:

public class OverloadExample {
    public static void main(String[] args) {
        OverloadExample example = new OverloadExample();
        example.method(12);
    }
    public void method(Object num) {
        System.out.println("调用 Object 方法");
    }
    public void method(int... num) { // 可选参数
        System.out.println("调用 int... 方法");
    }
}

以上程序的执行结果如下图所示: 

第5优先级:可选参数匹配

可选参数的调用优先级是最低的,当一个类中只有可选参数方法时,才会调用可选参数方法。

总结

可选参数是 JDK 5 中新增的以“...”格式存在的参数类型,可选参数可以匹配 0 到无穷个参数,但一个方法中只能有一个可选参数,且可选参数要放在方法参数的最后面。它可以和固定参数组成方法重载,但可选参数的调用优先级是最低的。

到此这篇关于Java中方法优先调用可选参数还是固定参数的文章就介绍到这了,更多相关Java调用内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

--结束END--

本文标题: Java中方法优先调用可选参数还是固定参数

本文链接: https://www.lsjlt.com/news/148268.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • Java中方法优先调用可选参数还是固定参数
    目录固定参数可选参数注意事项1.可选参数是从0到无穷2.一个方法只能有一个可选参数3.可选参数必须要放在方法最后4.可选参数和其他同名方法组成方法重载优先调用固定参数还是可选参数?结...
    99+
    2024-04-02
  • JVM常用参数调优方法是什么
    本篇内容介绍了“JVM常用参数调优方法是什么”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!对于调优这个事情来说,一般就是三个过程:性能监控:...
    99+
    2023-06-02
  • hadoop参数调优的方法是什么
    这篇文章主要介绍“hadoop参数调优的方法是什么”,在日常操作中,相信很多人在hadoop参数调优的方法是什么问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”hadoop参数调优的方法是什么”的疑惑有所帮助!...
    99+
    2023-06-03
  • java中的可变参数使用方法
    java中的可变参数使用方法可变参数时Java 1.5新增的方法,可变参数方法接收0个或者多个指定类型的参数,可变参数机制通过先创建一个数组,数组的大小为在调用位置所传递的参数数量,然后将参数值传到数组中,最后将数组传递给方法。如:publ...
    99+
    2023-05-31
    java 可变参数 ava
  • java动态参数方法怎么调用
    在Java中,可以使用可变参数来定义一个方法,这样就可以接受不定个数的参数。在调用这个方法时,可以直接将参数列表传递给方法。以下是一...
    99+
    2023-08-30
    java
  • Java 方法(方法的定义,可变参数,参数的传递问题,方法重载,方法签名)
    目录一、方法(Method)概念二、可变参数(Variable)三、方法的参数传递问题1. 基本数据类型2. 引用数据类型四、方法签名(Method Signature)五、方法的重...
    99+
    2024-04-02
  • C++ 中如何定义和调用可变参数函数?
    在c++++中,使用...(省略号)定义可变参数函数,允许函数接受任意数量的参数;调用时,将其视为固定参数函数即可。 如何在 C++ 中定义和调用可变参数函数? 可变参数函数(又称变参...
    99+
    2024-04-12
    c++ 可变参数函数 标准库
  • Java的可变参数方法怎么用
    今天小编给大家分享一下Java的可变参数方法怎么用的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。一、可变参数方法的定义首先看...
    99+
    2023-06-29
  • Torch中的超参数调优方法有哪些
    在Torch中,超参数调优方法有以下几种: 网格搜索(Grid Search):遍历所有可能的超参数组合,选取效果最好的组合。 随...
    99+
    2024-04-02
  • scala 调用 java 方法参数匹配问题
    scala调用java的FastJson时发生了一个方法参数匹配问题: scala和java几乎没有区别,可以互相调用。注意这里说的是几乎,总有那么少数,出人意料的惊喜在告诉你,scala就是scala。 ...
    99+
    2023-06-03
  • java重定向带参数的方法是什么
    在Java中,重定向带参数的方法是使用重定向符号(">")将方法的输出重定向到文件或其他输出流,然后传递参数给方法。例如:```ja...
    99+
    2023-10-10
    java
  • MyBatis中参数绑定的方法是什么
    MyBatis中参数绑定的方法有两种:基于位置的参数绑定和基于名称的参数绑定。 基于位置的参数绑定:在SQL语句中使用问号()指代...
    99+
    2024-04-08
    MyBatis
  • Java带参数与带返回值的方法的定义和调用
    目录带参数方法的定义和调用形参和实参带参数方法练习带返回值的方法的定义和调用带返回值的方法定义带返回值的方法调用带参数方法的定义和调用 形参和实参 形参:方法定义中的参数  ...
    99+
    2024-04-02
  • C语言函数分类自定义参数及调用方法是什么
    本篇内容主要讲解“C语言函数分类自定义参数及调用方法是什么”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“C语言函数分类自定义参数及调用方法是什么”吧!1.  函数是什么?提到函数,我们...
    99+
    2023-06-21
  • 一个Java方法可以使用多少个参数
    这篇文章主要介绍“一个Java方法可以使用多少个参数”,在日常操作中,相信很多人在一个Java方法可以使用多少个参数问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”一个Java方法可以使用多少个参数”的疑惑有所...
    99+
    2023-06-16
  • Java带参数与带返回值的方法怎么定义和调用
    这篇文章主要介绍“Java带参数与带返回值的方法怎么定义和调用”,在日常操作中,相信很多人在Java带参数与带返回值的方法怎么定义和调用问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Java带参数与带返回值的...
    99+
    2023-06-29
  • Python中可变参数的使用方法和特点
    Python中可变参数的特性及使用技巧 Python是一种简洁而强大的编程语言,其提供了许多灵活的特性来简化开发过程。其中之一就是可变参数(variable arguments),它允许我们在函数定义时不确定参数的个数。本文将介...
    99+
    2024-02-02
    键值对
  • VNPY参数优化功能v1版本中的更新参数批量生成方法是什么
    本篇文章给大家分享的是有关VNPY参数优化功能v1版本中的更新参数批量生成方法是什么,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。VNPY的参数优化功能,是策略优化的重要功能。...
    99+
    2023-06-02
  • 如何在PHP中实现参数前面加“…”的调用方法
    在PHP中实现参数前面加“...”的调用方法,其实就是使用可变长度参数(variadic argument)。可变长度参数允许函数接受任意数量的参数。在PHP中,通过在函数定义时在参数...
    99+
    2024-03-12
    php 可变参数 php 参数展开 php 参数列表
  • C#调用Dll传递字符串指针参数的方法是什么
    本篇内容主要讲解“C#调用Dll传递字符串指针参数的方法是什么”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“C#调用Dll传递字符串指针参数的方法是什么”吧!最近用c#写一个小软件,要调用VC写...
    99+
    2023-06-26
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作