首页 > 编程语言 >第八章《Java高级语法》第8节:Java可变参数

第八章《Java高级语法》第8节:Java可变参数

时间:2022-12-31 13:36:18浏览次数:54  
标签:Java int 08 第八章 语法 add 参数 可变 方法

如果需要定义一个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所示。

第八章《Java高级语法》第8节:Java可变参数_Java

图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所示。

第八章《Java高级语法》第8节:Java可变参数_数组_02

图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

相关文章

  • 第八章《Java高级语法》第11节:泛型
    ​泛型也JDK1.5引入的一种技术,它改变了核心API中的许多类和方法。使用泛型,可以建立类型安全模式来处理各种数据的类、接口和方法。使用泛型,一旦定义了一个算法,就可以独立于......
  • 第八章《Java高级语法》第12节:Lambda表达式
    ​Lambda表达式是JDK8的一个新特性,它可以定义大部分的匿名内部类,从而让程序员能写出更优雅的Java代码,尤其在集合的各种操作中可以极大地优化代码结构。8.12.1认识Lambda......
  • 音视频:JavaCV 视频切片(MPEG-TS)(HLS)
    需要进行简单的音视频编程,如果不是特别数据C/C++,那么JavaCV应该是比较好的选择,下面记录一下使用JavaCV视频切片(MPEG-TS)(HLS)的方法。注意:存放HLS切片的目录必须存在(不会自......
  • 第八章《Java高级语法》第7节:枚举
    ​枚举是JDK1.5中新增加的一种数据类型,它最大的特点就是枚举数据类型的取值范围由程序员自己规定,本小节将会讲解枚举的用法以及实现枚举的原理。8.7.1枚举的概念及定义方式......
  • day04_java基础
    day04_java基础课程目标1.【掌握】IDEA的基本使用2.【理解】什么是数组3.【掌握】数组的定义及初始化4.【理解】数组的内存图6.【理解】数组常见的问题7.......
  • JAVA零基础小白学习教程day05_java基础
    day05_java基础课程目标1.【理解】什么是方法2.【掌握】方法的语法,抄3遍3.【理解】方法的执行流程4.【掌握】方法的案例:常用类型5.【理解】方法的重载6.【......
  • JAVA零基础小白学习教程day06-JAVAOOP
    day06-JAVAOOP课程目标1.【理解】什么是面向对象2.【理解】类和对象的关系3.【掌握】类的定义和使用4.【掌握】三大特征之封装5.【掌握】this关键字的使用......
  • JAVA零基础小白学习教程day07-JAVAOOP
    day07-JAVAOOP课程目标1.【理解】什么是继承2.【掌握】继承的使用3.【理解】继承中的成员的特点4.【理解】super和this的作用5.【理解】什么是抽象6.【掌握】......
  • Typora常用语法
    Typora常用语法1.标题语法 快捷键#一级标题 快捷键Ctrl+1#二级标题 快捷键Ctrl+2#三级标题 快捷键Ctrl+3#四级标题 快捷键Ctrl+4#......
  • 第八章《Java高级语法》第9节:静态导入技术
    ​Java语言中调用静态方法时要在方法的前面加上类的名称,如下所示。Math.abs(-10);​Math.abs(2.5);​这段代码中,两次调用了Math类求绝对值的静态方法abs(),如果在程序中多次......