Java可变个数形参
目录
- Java可变个数形参
- 一、何谓可个数形参
- 二、由来
- 三、语法及使用规则
好久没更新博客了,最近忙着找工作,实在是抽不出来时间详细写博客,所以最近几篇可能都比较偏细节一点,都是一些干货,例子比较少,不过其他的东西可以回头再补充。
一、何谓可个数形参
可变参数个数机制,允许直接定义能和多个实参相匹配的形参。从而,可以用更简单的方式,来传递个数可变的实参。其实,就是方法的定义的时候不确定调用时的实参会传进来几个参数,所以定义为可变个数的形参,调用时传进来多少我都可以处理。
二、由来
Java从1.5版本引入了可变个数参数(varags),那在这之前Java不可以支持可变长参数吗?
当然不是,其实我们一直都在main方法中使用可变长参数,只是我们把它当成了一种规定。回想一下,我们最开始学“Hello World!”时,也会写在main方法中,如下,其实main方法中的参数args就是可变长度形参,可以看到可变长参数在1.5之前是使用的数组。
public static void main(String[] args){
System.out.println("Hello World!");
}
三、语法及使用规则
- 格式:数据类型…参数名 ,注意,在形参列表中,可变个数形参必须是最后一个参数,且最多只有一个,其实这也很好理解,放在前面就不好判断哪些是传给可变个数形参的参数了,既然放在最后了,一个就够了。
public void methodName(int otherArg, String... argName)
- 调用此函数时,此参数需要传递给他的参数可以是0个,1个,或任意个。
object.methodName(n, "第一个", "第二个");
- 在方法体中如何使用这些参数呢?与使用数组是一样的,可以遍历。
public void methodName(int otherArg, String... argName){
for(String arg : agrName){
System.out.println(arg);
}
for(int i = 0; i < argName.length; i++){
System.out.println(argName[i]);
}
}
- 在方法重载时需要注意,其“优先级比较低”,怎么理解呢?举例:
public void methodName(int otherArg, String age){
}
public void methodName(int otherArg, String... argName){
}
如上,某个类中有两个重载方法,当我们调用时输入一个int值和一个String型的值时,其实调用的是上面的方法,这就是我说的“优先级比较低”的含义。
但是当我们只输入一个int值或者一个int值2个String的值时,调用的就是下面的方法了。
还需要注意一个点,在一个类中无法同时存在这样的两个重载方法,如下:
// 错误演示
public void methodName(int otherArg, String[] args){
}
public void methodName(int otherArg, String... argName){
}
也可能是由于历史原因,或者本身新的可变个数形参底层还是使用的数组的缘故(原因有待考究),这两个方法不能看成重载,仍表示同一个方法,所以会产生冲突,编译报错。