java可变参数方法重载的注意事项

1.可变参数方法与数组参数方法重载

public class MethodParams{
//带可变参数的方法
public void hello(String ...params) {
System.out.println("执行带可变参数的方法,参数个数为:" + params.length);
}
//带数组参数的方法
public void hello(String[] params) {
System.out.println("执行带数组参数的方法,数组长度为:" + params.length);
}
}
1 错误

结论: JDK不允许存在, 带可变参数的方法和带数组参数的方法在同一类中重载。

可变参数==数组参数? 在带可变参数的方法体时,读取可变参数列表时,就是以数组的方式来读取;

带可变参数的方法可以传入一个数组参数,但带数组参数的方法却不能传入可变参数。

2.可变参数方法与可变参数方法重载

public void hello(String ...params) {
System.out.println("执行带可变参数的方法,参数个数为:" + params.length);
}
//带固定参数和可变参数
public void hello(String param1, String ...params) {
System.out.println("执行带固定参数和可变参数的方法,参数个数为:" + params.length);
}

测试代码跟上例中一样,编译时报错:

MethodParams.java:18: 对 hello 的引用不明确,MethodParams 中的 方法 hello(java.l
ang.String...) 和 MethodParams 中的 方法 hello(java.lang.String,java.lang.String
...) 都匹配
mp.hello("AAA","BBB","CCC");
^
1 错误

结论:JDK不允许存在,带相同参数类型列表(Type List)的参数列表的方法在同一类中重载。

3.可变参数方法与无参数方法重载

public void hello(String ...params) {
System.out.println("执行带可变参数的方法,参数个数为:" + params.length);
}
//不带参数的方法
public void hello() {
System.out.println("执行不带参数的方法");
}

我们都知道,可变参数即可带0个或者多个参数,如果带0个参数即不带参数时,JDK会怎么处理呢?

那我们就以执行"mp.hello()"来测试一下。编译通过,运行正常,调用的还带参数的hello()方法。

结论:当可变参数方法与不带参数的方法重载时,JDK默认调用的是无参数的方法。若类中没有定义无参数的方法,则会调用可变参数的方法。

时间: 2024-10-25 10:17:36

java可变参数方法重载的注意事项的相关文章

1.28 Java基础总结 ①方法重载②构造方法

1.28 Java基础总结 ①方法重载②构造方法 一.方法的重载在同一个类中,方法名相同,形参列表不同访问修饰符.返回类型和是否重载无关:按顺序对应的形参列表类型不同即可 二.构造器在类创建一个实例时被调用,构造方法只能用new关键字调用目的:初始化实例,初始化类属性(0,0.0,null,false)无返回值,和类名一致,用来构造对象作用:为对象分配内存, 创建并初始化成员变量(通过类创建,所以可以在static方法中调用构造方法) 返回引用,引用.属性:引用.方法(所以无返回值) 三.构造方

Java 可变参数

可变参数 可变参数可以当成一个数组使用 public void sum(int ...nums){ int sum = 0; for(int i:nums) { sum +=i; } System.out.println(sum); } @Test public void testSum() { sum(1,2,3,4,5); } 可变参数的实参可以是数组(同上) @Test public void testSum() { int arr[] ={1,2,3,4,5}; sum(arr); }

【Simple Java】Java可变参数举例

什么是Java可变参数 可变参数是Java 1.5引入的一个特性,它允许一个方法接受任意数量的参数. package simplejava; public class Q25 { public static void print(String... s) { for (String a : s) System.out.println(a); } public static void main(String[] args) { print("a"); print("a"

C# 中的可变参数方法(VarArgs)

首先需要明确一点:这里提到的可变参数方法,指的是具有 CallingConventions.VarArgs 调用约定的方法,而不是包含 params 参数的方法.可以通过MethodBase.CallingConvention 属性来获取某个方法的调用约定. 举个常见的例子来说,C 语言的 printf 方法大多数人应该都知道,它的作用是向标准输出流(stdout)写入格式化字符串,printf 的方法签名是: int printf(const char * format, ...); 方法签名

增强for循环、Map接口遍历、可变参数方法

增强for循环 1.for循环能做得事情,增强for循环大部分都能做(如果要想获得下标的时候就必须使用简单for循环了) 2.增强for有时候能够方便的处理集合遍历的问题,但是集合的标准遍历是使用迭代器 3.在集合框架中体现出了它的强大之处 Map接口遍历 Map接口的遍历: 1.第一种方法 使用map.values()方法,先把value的值都放在一个Collection集合中. 2.第二种方法 使用map.entrySet()方法(推荐使用) 3.第三种方法 使用map.keySet()方法

巩固java(六)----java中可变参数方法(非常实用哦)

java提供了可变参数的方法,即方法的参数个数可以不确定,用"..."定义. import java.util.ArrayList; import java.util.List; public class VariableParameter { //求若干个整型数中的最大值 public int getMax(int... items){ //定义可变参数items int max = Integer.MIN_VALUE; //次数为int能表示的最小值,值为-2147483648 f

java可变参数Varargs

http://www.cnblogs.com/shishm/archive/2012/01/31/2332656.html J2SE 1.5提供了“Varargs”机制.借助这一机制,可以定义能和多个实参相匹配的形参.从而,可以用一种更简单的方式,来传递个数可变的实参.本文介绍这一机制的使用方法,以及这一机制与数组.泛型.重载之间的相互作用时的若干问题. 到J2SE 1.4为止,一直无法在Java程序里定义实参个数可变的方法——因为Java要求实参(Arguments)和形参(Parameter

Java 可变参数列表

1.可变参数列表的简单实现 当调用方法时,方法的参数个数或类型未知时,称其为可变参数列表.在以前的Java代码中,可以使用Object数组来实现这样的功能.因为,所有的类都是直接或间接继承于Object类. VarArgs.java package sample; class A1{} public class VarArgs { static void printArray(Object[] args){ for(Object obj:args) System.out.print(obj+"

JAVA SE中方法重载和方法重写及数据库中子程序的重载

首先方法重写和方法重载是建立在Java的面向对象的继承和多态的特性基础上而出现的.至于面向对象的继承和多态的特性我就不在这里多说了.继承是指在一个父类的基础再创建一个子类,这样子类就拥有了父类的非私有的特性,同时子类还可以扩展自己的特性,这样就引出了方法重写和方法重载! 一.方法重写(Override)         在Java中如何来定义重写:Java程序中类的继承特性可以产生一个子类,子类继承父类就拥有了父类的非私有的属性(方法和变量),在子类中可以增加自己的属性(方法和变量),同时也可以