如果需要定义一个2个数相加的方法,可以在定义方法时为方法设置2个参数,同理,如果要定义一个3个数相加的方法,就给方法设置3个参数,但是如果想定义一个任意多数字相加的方法该怎么设置方法的参数呢?从JDK1.5开始,Java语言新增加了一种特性:允许方法的参数不固定,专业上称之为“可变参数”。 可变参数方法的语法格式为:
返回值类型方法名...参数名称) { ... } |
从上面这个格式可以看到:参数类型后面加...就表示可变参数,这些参数有统一的类型和名称。在方法中,要按照调用数组元素的方式来调用可变参数。下面的【例08_22】展示了如何设置和使用可变参数。
【例08_22 可变参数的使用】
Exam08_22.java
public class Exam08_22 {
public static int add(int... nums){//为方法设置可变参数
int sum = 0;
for(int i=0;i<nums.length;i++){
sum = sum+nums[i];//以数组的形式调用可变参数
}
return sum;
}
public static void main(String[] args) {
int r1,r2,r3;
r1 = add(2,3);
r2 = add(2,3,4);
r3 = add(2,3,4,5);
System.out.println("2个数相加的结果是:"+r1);
System.out.println("3个数相加的结果是:"+r2);
System.out.println("4个数相加的结果是:"+r3);
}
}
【例08_22】的运行结果如图8-31所示。
图8-31 【例08_22】运行结果
从运行结果图可以看出,无论给add()方法传递几个参数,方法都能返回正确的计算结果。
可变参数的定义和使用都不难,但在实际开发过程中有几个细节需要各位读者注意:
1. 固定参数方法的调用优先级更高
在一个类中,如果分别使用固定参数和可变参数定义了两个同名方法,这两个同名方法就会形成重载关系,但在两个方法都可以被调用的情况下,固定参数的方法调用优先级更高,请看下面的【例08_23】
【例08_23 固定参数方法优先级高】
Exam08_23.java
public class Exam08_23 {
//可变参数的add()方法
public static int add(int... nums){
System.out.println("可变参数");
int sum = 0;
for(int i=0;i<nums.length;i++){
sum = sum+nums[i];
}
return sum;
}
//固定参数的add()方法
public static int add(int a,int b){
System.out.println("固定参数");
return a+b;
}
public static void main(String[] args) {
add(1,2);//①
}
}
【例08_23】中定义了两个add()方法,它们的参数形式不同。当执行语句①时,虚拟机既可以调用固定参数的add()方法,也可以调用可变参数的add()方法。在这种情况下,会优先选择调用固定参数的add()方法,因此【例08_23】的运行结果是输出“固定参数”。读者可自行运行【例08_23】以验证这个结论的正确性。
2. 可以用数组作为可变参数的实参
【例08_22】和【例08_23】中都定义了可变参数的add()方法,当调用可变参数add()方法时,可以用一个数组作为方法参数,例如用以下形式调用add()方法所示。
add(new int[]{1,2,3});
之所以可以用数组作为可变参数的实参,就是因为编译器在编译源代码时会把可变参数转换成一个数组,这也是可变参数的实现原理。因此,直接把一个数组传入到add()方法中也是可以的。读者可以把【例08_22】中add()方法的实参修改为数组,并重新观察程序运行结果。
3. 可变参数只能位于参数列表的最后
如果方法中有普通参数,普通参数要放在参数列表的前边,可变参数要放在参数列表的最后。这是因为在编译过程中,有一个把实参和形参进行对位的工作,如图8-32所示。
图8-32 实参形参对位操作示意图
实参和形参进行对位时是从左向右进行的。把左边所有的普通参数都完成实参与形参的对位后,剩余的实参就都可以归入可变参数中。就如图8-32所示,1、2、3分别对位a、b、c,剩余的4、5、6、7自然对位可变参数nums。如果把可变参数放到参数列表的前边或中间的某个位置,由于可变参数对应的实参数量不固定,再加上有方法重载导致参数多样化的可能性,这些都使得形式实参和形参的对位工作会变得复杂很多。为降低编译复杂度和减少产生歧义的可能性,Java语言要求可变参数只能出现在整个参数列表的最后。
4. 一个方法的参数列表中最多只能有一个可变参数
如果参数列表中出现了2个或以上的可变参数,必然有一个会不出现在参数列表的最后,因此参数列表中只能有一个可变参数。
除此文字版教程外还有更详细的视频讲解,小伙伴们可以点击这里观看。
标签:Java,int,08,第八章,语法,add,参数,可变,方法 From: https://blog.51cto.com/mugexuetang/5982083