java中的main方法为什么接受无效的String args

时间:2014-05-06 06:27:56

标签: java string main variadic-functions

我用public static void main(String arg[]) OR创建了一个Java应用程序 public static void main(String[] arg)

但昨天我发现如果我用public static void main(String... args)编译一个程序,这也完全正常。的为什么吗

3 个答案:

答案 0 :(得分:2)

这是因为String...将转换为String[]

根据jls §8.4.1

  

变量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
相关问题