【问题标题】: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... 会将字符串转换为数组。所以它会正常工作。 :)

标签: java string main variadic-functions


【解决方案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

      【讨论】:

        猜你喜欢
        • 2010-10-18
        • 2014-02-22
        • 2018-05-09
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2010-10-07
        相关资源
        最近更新 更多