代码之家  ›  专栏  ›  技术社区  ›  Mohamad Alhamoud

谁将“args”传递给main方法?

  •  0
  • Mohamad Alhamoud  · 技术社区  · 15 年前

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

    5 回复  |  直到 15 年前
        1
  •  5
  •   OscarRyz    15 年前

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

    如果没有(因为您没有在IDE中指定它们),数组将为空(不为空,至少在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.
    
        }
     }
    
        2
  •  3
  •   Dilum Ranatunga    15 年前

    String[] args = new String[0];
    

    index >= args.length ,异常是一致的。

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

        3
  •  1
  •   Lee    15 年前

    NullReferenceException 相反。

        4
  •  0
  •   Robin    15 年前

    如果在命令行上传递元素,则args[]数组中只有元素。

    java my.test.MyTest arg1 arg2
    

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

        5
  •  0
  •   ckramer    15 年前

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