java中的main方法为啥接受无效的String args
Posted
技术标签:
【中文标题】java中的main方法为啥接受无效的String args【英文标题】:main method in java why Accept invalid String argsjava中的main方法为什么接受无效的String args 【发布时间】:2014-06-22 15:13:45 【问题描述】:我使用public static void main(String arg[])
或创建了一个 Java 应用程序
public static void main(String[] arg)
但昨天我发现如果我用public static void main(String... args)
编译一个程序,这也完全可以正常工作。 为什么?
【问题讨论】:
相信你明白String[] args和String...args的相似之处 这不是无效的,这是一个可变参数;可变参数是数组的语法糖 好吧,它只是因为 String... 会将字符串转换为数组。所以它会正常工作。 :) 【参考方案1】:这是因为String...
会被转换成String[]
根据jls §8.4.1
可变参数方法的调用可能包含比形式参数更多的实际参数表达式。所有与变量 arity 参数之前的形式参数不对应的实际参数表达式都将被计算,并将结果存储到一个数组中,该数组将传递给方法调用。
在 Java 中声明 varargs
是编译时错误:
String... abc="abc","def";
这是因为varargs
可以作为方法签名中的最后一个参数,正如jls 中所说,varargs
将被评估并将结果存储在数组中,然后传递给方法
【讨论】:
【参考方案2】:这是因为,
以Datatype ... var_name
形式写的任何东西都只是 var args
它可以接受任意数量的该类型的参数。
所以它和数组一样。
例如:String ... args
等价于 String[] args
【讨论】:
【参考方案3】:这称为可变长度参数,您可以发送任意数量的具有相同数据类型的参数。您可能会想到一个问题,“这些功能可以重载吗?”答案是肯定的。
该示例显示了 VARGS 的工作原理
public class VarargsTest // 计算平均值 public static double average( double... numbers ) double total = 0.0; // 初始化总计 // 使用增强的 for 语句计算总计 for ( double d : numbers ) total += d; 返回总数/numbers.length; // 结束方法平均值 public static void main( String args[] ) double d1 = 10.0; 双 d2 = 20.0; 双 d3 = 30.0; 双 d4 = 40.0; System.out.printf( "d1 = %.1f\nd2 = %.1f\nd3 = %.1f\nd4 = %.1f\n\n", d1, d2 , d3, d4 ); System.out.printf( "d1 和 d2 的平均值为 %.1f\n", average( d1, d2 ) ); System.out.printf( "d1, d2, d3 的平均值为 %.1f\n", average( d1, d2, d3 ) ); System.out.printf( "d1, d2, d3, d4 的平均值为 %.1f\n", average( d1, d2, d3, d4 ) ); // 结束 main // 结束类 VarargsTest【讨论】:
以上是关于java中的main方法为啥接受无效的String args的主要内容,如果未能解决你的问题,请参考以下文章