Java中的Varargs详解?


Java 的一个特性叫做可变参数 (varargs),它允许方法接受可变数量的参数。这对于需要处理未知或可变数量输入的方法非常有用。

在 Java 5 引入 varargs 之前,我们有两种方法来处理需要可变数量参数的方法。一种方法是使用重载方法。方法必须开发多个版本,每个版本都有不同数量的参数。

如果参数很多,这可能会变得复杂且难以维护。

Varargs 语法

在内部,varargs 方法使用一维数组来实现。这意味着 varargs 方法的参数存储在一个数组中,可以使用每个参数的索引来访问它。可以使用三个点或省略号 (...) 来指定 varargs 参数。

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

使用这种方法,编译器知道 fun() 可以用 0 到 n 个或更多参数调用。因此,在这种情况下,隐式指定为 int[] 类型的数组。

示例 1

display()

这段代码定义了一个名为 VarargsInstance 的类,其中包含一个名为 display 的方法,该方法可以接受可变数量的字符串参数。在 main 函数中,display 方法被调用了两次——一次不带任何参数,一次带四个字符串参数。调用该方法时,它会打印一条消息。

算法

  • 步骤 1:创建一个名为 VarargsInstance 的类。

  • 步骤 2:定义一个名为 display() 的静态方法。此方法接受可变数量的 String 参数。

  • 步骤 3:在 display() 方法内部,将以下消息打印到控制台:“已调用 display 方法”。

  • 步骤 4:创建一个 main 方法。

  • 步骤 5:在 main 方法中,使用零个参数调用 display() 方法一次。

  • 步骤 6:使用四个参数再次调用 display() 方法。

  • 步骤 7:运行程序。

示例

public class VarargsInstance{  
   
 public static void display(String... values){  
  System.out.println("The display method has been called ");  
 }  
  
 public static void main(String args[]){  
  
 display();//zero argument   
 display("my","name","is","tutorialspoint");//four arguments  
 }   
}  

输出

The display method has been called 
The display method has been called

示例 2

happy()

这段代码定义了一个名为 Example1 的类,其中包含一个名为 happy() 的方法,该方法可以接受灵活数量的整数参数。在这个方法内部,它显示参数的数量并使用循环列出参数。在主程序中,它演示了使用不同数量的参数调用 happy() 方法,生成的输出显示了提供的参数的数量和值。

算法

  • 步骤 1:创建一个名为 Example1 的类。

  • 步骤 2:定义一个名为 happy() 的静态方法。此方法接受可变数量的 int 参数。

  • 步骤 3:在 happy() 方法内部执行以下操作

    • 将此打印到控制台:“参数数量:” + a.length。

    • 通过 for each 循环迭代 a 变量,将数组的内容打印到控制台。

  • 步骤 4:创建一个 main 方法。

  • 步骤 5:在 main 方法中执行以下操作

    • 使用一个参数 250 调用 happy() 方法一次。

    • 使用四个参数 20、30、40 和 50 再次调用 happy() 方法。

    • 使用零个参数再次调用 happy() 方法。

  • 步骤 6:运行程序。

示例

public class Example1 {

	static void happy(int... a)
	{
		System.out.println("Count of arguments: "
						+ a.length);

		// employing 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 the varargs method with various number of parameters
	
		happy(250);
		
		// four parameters
		happy(20, 30, 40, 50);
		
		// no parameter
		happy();
	}
}

输出

Count of arguments: 1
250 
Count of arguments: 4
20 30 40 50 
Count of arguments: 0

示例 3

display()

在此代码中,有一个名为 VarargsInstance2 的类,其中包含一个名为 display() 的方法,该方法可以接受可变数量的字符串参数。调用该方法时,它会打印“已调用 display 方法”,然后在单独的行上列出每个提供的参数。在主程序中,通过使用不同数量的参数调用 display() 方法来演示 display() 方法,生成显示的输出。

算法

  • 步骤 1:创建一个名为 VarargsInstance2 的类。

  • 步骤 2:定义一个名为 display() 的静态方法。此方法接受可变数量的 String 参数。

  • 步骤 3:在 display() 方法内部执行以下操作

    • 将以下消息打印到控制台:“已调用 display 方法”。

    • 使用 for each 循环遍历 values 变量并将数组的内容打印到控制台。

  • 步骤 4:创建一个 main 方法。

  • 步骤 5:在 main 方法中执行以下操作

    • 使用零个参数调用 display() 方法一次。

    • 使用一个参数“hey”再次调用 display() 方法。

    • 使用四个参数“welcome”、“all”、“to”和“Tutorialspoint”再次调用 display() 方法。

  • 步骤 6:运行程序

示例

public class VarargsInstance2{  
   
 static void display(String... values){  
  System.out.println("display method called ");  
  for(String s:values){  
   System.out.println(s);  
  }  
 }  
  
 public static void main(String args[]){  
  
 display();//zero argument   
 display("hey");//one argument   
 display("welcome","all","to","Tutorialspoint");//four arguments  
 }   
}  

输出

display method called 
display method called 
hey
display method called 
welcome
all
to
Tutorialspoint

示例 4

for()

这段代码定义了一个名为 Tutorialspoint 的类,其中包含一个名为 joy() 的方法,该方法接受一个字符串和灵活数量的整数参数。调用该方法时,它会显示给定的字符串、提供的参数的数量,然后使用循环列出整数参数。在主程序中,通过使用字符串和整数的不同组合调用 joy() 方法来演示 joy() 方法,生成显示的输出。

算法

  • 步骤 1:定义一个名为 joy() 的静态方法。此方法接受一个 String 参数和可变数量的 int 参数。

  • 步骤 2:在 joy() 方法内部执行以下操作

    • 将此打印到控制台:“字符串:” + str。

    • 将此打印到控制台:“参数数量为:” + b.length。

    • 使用 for each 循环遍历 b 变量并将数组的内容打印到控制台。

  • 步骤 3:创建一个 main 方法。

  • 步骤 4:在 main 方法中执行以下操作

    • 使用字符串“TLP”和两个整数 250 和 350 调用 joy() 方法一次。

    • 使用字符串“Example”和五个整数 20、30、40、50 和 60 再次调用 joy() 方法。

    • 使用字符串“for students”和无整数再次调用 joy() 方法。

  • 步骤 5:运行程序。

示例

public class Tutorialspoint{

	static void joy(String str, int... b)
	{
		System.out.println("String: " + str);
		System.out.println("count of arguments is: "
						+ b.length);

		// employing for each loop to display contents of a
		for (int i : b)
			System.out.print(i + " ");

		System.out.println();
	}

	public static void main(String args[])
	{
		// Calling joy() with different parameter
		joy("TLP", 250, 350);
		joy("Example", 20, 30, 40, 50, 60);
		joy("for students");
	}
}

输出

String: TLP
count of arguments is: 2
250 350 
String: Example
count of arguments is: 5
20 30 40 50 60 
String: for students
count of arguments is: 0

结论

Varargs 方法可以故意多样化,尽管这种多样化可能会引入不确定性。在 JDK 5 之前的时代,存在两种管理可变长度参数的方法:重载或使用数组参数。需要注意的是,在一个方法中,只允许一个可变参数。此外,可变参数 (Varargs) 必须位于最后一个参数。

更新于:2023年8月29日

360 次查看

开启您的职业生涯

完成课程获得认证

开始学习
广告
© . All rights reserved.