我用public static void main(String arg[])
OR创建了一个Java应用程序
public static void main(String[] arg)
但昨天我发现如果我用public static void main(String... args)
编译一个程序,这也完全正常。的为什么吗
答案 0 :(得分:2)
这是因为String...
将转换为String[]
变量arity方法的调用可能包含比形式参数更多的实际参数表达式。将评估与变量arity参数之前的形式参数不对应的所有实际参数表达式,并将结果存储到将传递给方法调用的数组中。
在Java中声明varargs
是一个编译时错误,如:
String... abc={"abc","def"};
这是因为varargs
可用作方法签名中的最后一个参数,如jls中所述,varargs
将被评估,结果将存储在数组中,然后传递给方法
答案 1 :(得分:0)
这是因为,
以Datatype ... var_name
形式编写的任何内容都只是var args
可以接受该类型的任意数量的参数。
以这种方式与Array相同。
例如:String ... args
等同于String[] args
答案 2 :(得分:0)
这称为可变长度参数,您可以使用相同的数据类型发送任意数量的参数。可能一个问题必须出现在你的脑海中,“这些功能可以超负荷吗?”答案是肯定的。
该示例显示了VARGS如何工作
public class VarargsTest
{ // calculate average
public static double average( double... numbers )
{ double total = 0.0; // initialize total
// calculate total using the enhanced for statement
for ( double d : numbers )
total += d;
return total / numbers.length;
} // end method average
public static void main( String args[] )
{
double d1 = 10.0;
double d2 = 20.0;
double d3 = 30.0;
double d4 = 40.0;
System.out.printf( "d1 = %.1f\nd2 = %.1f\nd3 = %.1f\nd4 = %.1f\n\n", d1, d2, d3, d4 );
System.out.printf( "Average of d1 and d2 is %.1f\n",
average( d1, d2 ) );
System.out.printf( "Average of d1, d2 and d3 is %.1f\n",
average( d1, d2, d3 ) );
System.out.printf( "Average of d1, d2, d3 and d4 is %.1f\n",
average( d1, d2, d3, d4 ) );
} // end main
} // end class VarargsTest