【问题标题】:Who passed the "args" to the main method?谁将“args”传递给 main 方法?
【发布时间】:2010-06-22 19:35:45
【问题描述】:

我尝试运行一个小型 c# 和 java 程序(使用 VS 和 NetBeans,而不是从命令行)并打印 args[0] 的值,但我得到了一个 IndexOutOfRangeException。
我知道args 用于传递命令行参数,但它在main 方法中仍然是仍然,那么如果没有传递给它的args 参数,程序将如何运行?

【问题讨论】:

  • 它首先检查数组 args 的长度?

标签: c# java


【解决方案1】:

那么如果没有传入args参数,程序将如何运行呢? 创建程序时,会分配一个新数组并用命令行中的值填充。

如果没有(因为您没有在 IDE 中指定它们)数组将为空(不为 null,至少在 Java 中不存在)

要避免使用 IndexOutOfRangeException,您必须要么不使用参数,要么分配默认值并验证 args 数组长度。

例如(在 Java 中)

public class YourClass {
    public static void main( String [] args ) {  
          String param = "someDefault";
          // validate args.length 
          if( args.length > 0 ) { // if there is a parameter
              param = args[0]; // use it 
          }
          // continue with "param" already defined.

    }
 }

【讨论】:

  • 所以它将为空而不是 null ,因此程序将运行良好...谢谢!
【解决方案2】:

Java 允许空数组;即

String[] args = new String[0];

由于index >= args.length,异常一致。

关于这个特定主题,还有一点需要注意:与 C 程序等不同,arg 0 不是程序本身。因此,使用空数组调用 main(String[]) 是很常见的。

【讨论】:

    【解决方案3】:

    如果没有参数,则数组将为空 - 如果未传递任何数组,您将使用 NullReferenceException。

    【讨论】:

      【解决方案4】:

      args[] 数组中只有在命令行中传递的元素。

      java my.test.MyTest arg1 arg2
      

      这将导致参数 arg1 和 arg2 在 arg[] 数组中传递。如果不传递任何参数,则 arg[] 数组的长度为 0,因此访问任何索引都会引发异常。

      【讨论】:

        【解决方案5】:

        在某些情况下,调用命令行 exe 时不包含任何参数是完全合理的。 args 参数是为了让您知道 args 是否被传递,如果是,它们是什么。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2012-08-21
          • 2021-12-05
          • 2013-07-23
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多