一、可变个数形参的方法:
1. jdk5.0新增
允许定义一种方法,其形参可以和多个实参相匹配(0个、1个、2个…几个都行)
【和上一个方法同时存在时,传入一个参数,优先匹配上一个方法】
2. 具体使用
- 格式:“数据类型 … 变量名”,如:
public void show(String ... strs){}
-
当调用可变个数形参的方法时,传入的参数个数可以是:0个,1个,2个…
-
可变个数形参的方法,与本类中方法名相同、参数列表不同的方法,也构成重载;
-
可变个数形参的方法,与形参是数组的同名方法,无法构成重载(即,无法共存);
【这是由于历史原因:在jdk5.0以前,想要传入多个形参,只能使用数组; jdk5.0以后,可变类型参数相当于提供了一种传多个参数的简便方式。因此编译器认为这两种方式是完全一样的】 -
可变个数形参,在方法的形参中,只能声明在末尾,而且只能有一个;
【很好理解,如果放在开头或中间,或者有好几个,编译器就会分不清楚,到底前面究竟是有几个是给可变形参的(可能是你忘了写别的形参呢)】
//测试代码:
public class MethodArgsTest {
public static void main(String[] args) {
MethodArgsTest test = new MethodArgsTest();
test.show(1);
test.show("hello");
test.show("Hello", "World");
test.show("Hello", "Wor", "World");
test.show(new String[]{"AA", "BB", "CC"});
//可见,即使就传数组,依然可以匹配到可变形参方法
}
public void show(int i){}
public void show(String s){}
/*
* 允许定义一种方法,其形参可以和多个实参相匹配(0个、1个、2个...几个都行)
* 【和上一个方法同时存在时,传入一个参数,优先匹配上一个方法】
*/
public void show(String ... strs){
System.out.println("show(String ... strs)");
//遍历,和数组一样(实际上就相当于数组,只是格式变简单了)
for(int i = 0; i < strs.length; i++){
System.out.print(strs[i] + "\t");
}
}
/*
* 但是形参是数组,与形参是可变类型参数之间,是无法构成重载的(即,无法共存)
* 【这是由于历史原因:在jdk5.0以前,想要传入多个形参,只能使用数组;
* jdk5.0以后,可变类型参数相当于提供了一种传多个参数的简便方式,因此编译器认为这两种方式是完全一样的】
*/
// public void show(String[] strs){
//
// }
public void show(int i, String ... strs){}
}
3. 使用场景
例如:操作数据库的时候,查询操作可能用户会给定多个查询条件,
select ... from ... where id = ? & name = ? & .....
这个时候,就可以在Java层面编程,用可变多个参数,给占位符赋值