使用int,而不是字符串:公共静态无效的主要(INT []参数)(Using int Instead

2019-06-23 16:13发布

我的印象是主要方法必须有形式“公共静态无效的主要(字串[] args){}”,你不能错过INT []参数。

但是,在Windows命令行,运行以下.class文件时,既接受int和字符串作为参数。

例如,使用这个命令将给出输出“纵梁”:“的java IntArgsTest纵梁”

我的问题是,为什么呢? 为什么会这样的代码接受一个字符串作为没有错误的说法?

这里是我的代码。

public class IntArgsTest 
{
    public static void main (int[] args)
    {

        IntArgsTest iat = new IntArgsTest(args);

    }

    public IntArgsTest(int[] n){ System.out.println(n[0]);};

}

Answer 1:

进入主法,使用的JVM启动程序的人,一切都是一个字符串,应有尽有。 它可以像INT 1,但它确实为字符串“1”,这是一个很大的区别。

现在,你的代码,如果你尝试运行它时会发生什么? 当然,因为它是有效的Java,但你的主要方法签名不匹配由JVM需要为程序的起点的话,会编译就好了。

为了您的代码运行,你需要添加一个有效的主要方法一样,

public class IntArgsTest {
   public static void main(int[] args) {

      IntArgsTest iat = new IntArgsTest(args);

   }

   public IntArgsTest(int[] n) {
      System.out.println(n[0]);
   };

   public static void main(String[] args) {
      int[] intArgs = new int[args.length];

      for (int i : intArgs) {
         try {
            intArgs[i] = Integer.parseInt(args[i]);
         } catch (NumberFormatException e) {
            System.err.println("Failed trying to parse a non-numeric argument, " + args[i]);
         }
      }
      main(intArgs);
   }
}

然后,当程序被称为通过一些数字。



Answer 2:

那么,你可以有名称的任何方法main有任意数量的参数。 但JVM将查找main方法有确切的签名public static void main(String[])

main您已经定义方法只不过是另一种方法的类。

我没有访问Windows现在,但让我尝试在一段时间。 我曾尝试在Fedora,当然我有以下异常:

Exception in thread "main" java.lang.NoSuchMethodError: main

请注意,类将因为上述的编译细说原因。

更新:我在Windows 7测试,结果是一样的。 我很惊讶你怎么说的吧为你工作。



Answer 3:

此代码将不会运行。 而代码编译(因为你并不需要一个主编译),当您尝试运行它,你会得到一个"Main method not found"错误。

更妙的是,当我跑它,它说:

 "please define the main method as: public static void main(String[] args)


Answer 4:

此代码包含不公开的作品静态无效的主要(INT []参数)。 因为JVM需要的参数值作为一个字符串参数。 它不采取任何int参数。 因此,如果我们想要一个int参数意味着我们必须将字符串参数转换为整数参数。 运行该代码是必需的有效方法主要 (例如: 公共静态无效主要(字符串ARGS []))



文章来源: Using int Instead Of String: public static void main (int[] args)