繁体   English   中英

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

[英]main method in java why Accept invalid String args

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

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

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

根据jls§8.4.1

变量arity方法的调用可能包含比形式参数更多的实际参数表达式。 将评估与变量arity参数之前的形式参数不对应的所有实际参数表达式,并将结果存储到将传递给方法调用的数组中。

在Java中声明varargs是一个编译时错误:

String... abc={"abc","def"};

这是因为varargs可用作方法签名中的最后一个参数,并且如jls中所述,将评估varargs并将结果存储在数组中然后传递给方法

这是因为 ,

以任何形式写入Datatype ... var_name只是var args

它可以接受该类型的任意数量的参数。

这样就像Array一样。

ex: String ... args相当于String[] args

这称为可变长度参数,您可以使用相同的数据类型发送任意数量的参数。 可能一个问题必须出现在你的脑海中,“这些功能可以超负荷吗?” 答案是肯定的。

该示例显示了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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM