📜  Java中的变量参数(Varargs)

📅  最后修改于: 2022-05-13 01:54:29.225000             🧑  作者: Mango

Java中的变量参数(Varargs)

Java中的可变参数(Varargs)是一种采用可变数量参数的方法。 Java中的可变参数简化了需要采用可变数量参数的方法的创建。

需要Java Varargs

  • 在 JDK 4 之前,我们不能声明带有变量 no 的方法。的论点。如果参数数量有任何变化,我们必须声明一个新方法。这种方法增加了代码的长度并降低了可读性。
  • 在 JDK 5 之前,可以通过两种方式处理可变长度参数。一个使用重载方法(每个一个),另一个将参数放入一个数组中,然后将该数组传递给该方法。它们都可能容易出错并且需要更多代码。
  • 为了解决这些问题,JDK 5 中引入了可变参数(Varargs)。从 JDK 5 开始,我们可以声明一个具有可变数量参数的方法。这种类型的方法称为可变参数方法。可变参数功能提供了一个更简单、更好的选择。

可变参数的语法

在内部,Varargs 方法是通过使用单维数组概念来实现的。因此,在 Varargs 方法中,我们可以使用索引来区分参数。可变长度参数由三个句点或点 (…) 指定。

例如,

public static void fun(int ... a) 
{
   // method body
} 

这个语法告诉编译器 fun() 可以用零个或多个参数调用。因此,在这里,a 被隐式声明为 int[] 类型的数组。

下面是用于说明上述概念的代码片段:

Java
// Java program to demonstrate varargs
 
class Test1 {
    // A method that takes variable
    // number of integer arguments.
    static void fun(int... a)
    {
        System.out.println("Number of arguments: "
                           + a.length);
 
        // using for each loop to display contents of a
        for (int i : a)
            System.out.print(i + " ");
        System.out.println();
    }
 
    // Driver code
    public static void main(String args[])
    {
        // Calling the varargs method with
        // different number of parameters
       
        // one parameter
        fun(100);
           
          // four parameters
        fun(1, 2, 3, 4);
         
          // no parameter
          fun();
    }
}


Java
// Java program to demonstrate
//  varargs with normal arguments
 
class Test2 {
   
    // Takes string as a argument followed by varargs
    static void fun2(String str, int... a)
    {
        System.out.println("String: " + str);
        System.out.println("Number of arguments is: "
                           + a.length);
 
        // using for each loop to display contents of a
        for (int i : a)
            System.out.print(i + " ");
 
        System.out.println();
    }
 
    public static void main(String args[])
    {
        // Calling fun2() with different parameter
        fun2("GeeksforGeeks", 100, 200);
        fun2("CSPortal", 1, 2, 3, 4, 5);
        fun2("forGeeks");
    }
}


输出
Number of arguments: 1
100 
Number of arguments: 4
1 2 3 4 
Number of arguments: 0

上述程序的解释

  • ... 语法告诉编译器已经使用了可变参数,并且这些参数应该存储在由 a 引用的数组中
  • 变量a作为数组进行操作。在这种情况下,我们将数组“a”的数据类型定义为 int。所以它只能取整数值。可以使用 a.length 找到参数的数量,这是我们在Java中找到数组长度的方式。

注意:一个方法也可以有可变长度参数和其他参数,但是应该确保只有一个可变参数参数应该写在方法声明的参数列表中的最后一个。例如:

int nums(int a, float b, double … c)

在这种情况下,前两个参数与前两个参数匹配,其余参数属于 c。

Java

// Java program to demonstrate
//  varargs with normal arguments
 
class Test2 {
   
    // Takes string as a argument followed by varargs
    static void fun2(String str, int... a)
    {
        System.out.println("String: " + str);
        System.out.println("Number of arguments is: "
                           + a.length);
 
        // using for each loop to display contents of a
        for (int i : a)
            System.out.print(i + " ");
 
        System.out.println();
    }
 
    public static void main(String args[])
    {
        // Calling fun2() with different parameter
        fun2("GeeksforGeeks", 100, 200);
        fun2("CSPortal", 1, 2, 3, 4, 5);
        fun2("forGeeks");
    }
}
输出
String: GeeksforGeeks
Number of arguments is: 2
100 200 
String: CSPortal
Number of arguments is: 5
1 2 3 4 5 
String: forGeeks
Number of arguments is: 0

错误的可变参数示例

案例 1:在一个方法中指定两个 Varargs:

void method(String... gfg, int... q)
{
    // Compile time error as there 
    // are two varargs
}

案例 2:将 Varargs 指定为方法的第一个参数而不是最后一个参数:

void method(int... gfg, String q)
{
    // Compile time error as vararg 
    // appear before normal argument
}

关于可变参数的要点

  • Vararg 方法也可以重载,但重载可能会导致歧义。
  • 在 JDK 5 之前,可以通过两种方式处理可变长度参数:一种是使用重载,另一种是使用数组参数。
  • 方法中只能有一个变量参数。
  • 变量参数 (Varargs) 必须是最后一个参数。