【问题标题】:Using int Instead Of String: public static void main (int[] args)使用 int 代替字符串:public static void main (int[] args)
【发布时间】:2012-04-28 08:13:44
【问题描述】:

我的印象是 main 方法必须具有“public static void main (String[] args){}”的形式,你不能传递 int[] 参数。

但是,在 Windows 命令行中,当运行以下 .class 文件时,它接受 int 和 string 作为参数。

例如,使用此命令将给出输出“stringers”:“java IntArgsTest stringers”

我的问题是,为什么?为什么这段代码会接受一个字符串作为参数而不会出错?

这是我的代码。

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

        IntArgsTest iat = new IntArgsTest(args);

    }

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

}

【问题讨论】:

  • 根据其他人的反应,它对我来说失败了。您没有说明您正在使用哪个 JRE 或操作系统并没有帮助,但我强烈怀疑您没有运行您认为正在运行的程序。

标签: java command-line cmd arguments main


【解决方案1】:

传递给main方法的所有东西,JVM用来启动程序的方法,都是一个字符串,所有东西。它可能看起来像 int 1,但它实际上是字符串“1”,这是一个很大的不同。

现在有了您的代码,如果您尝试运行它会发生什么?当然它可以编译得很好,因为它是有效的 Java,但是您的 main 方法签名与 JVM 要求的作为程序起点的签名不匹配。

要运行您的代码,您需要添加一个有效的 main 方法,例如,

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);
   }
}

然后在程序调用的时候传入一些数字。

【讨论】:

  • 非常有趣的方法!感谢您的洞察力,我想我会经常使用它。虽然没有回答我的问题;当我在 cmd 中运行 .class 文件时,它确实运行了。奇怪,不是吗?
  • @blackscholes:我可以向你保证它没有运行。您可能认为它已运行,但您的代码无法在没有附加代码的情况下在标准 Java 编译器中运行。同样,它会编译,但不会运行。期间。
  • 您正在编译为 .jar 文件吗?或 .class 文件?我所做的是从 .jar 文件中提取 .class 文件,将其放在我的桌面上,然后在 cmd 中运行它......该文件是“IntArgsTest.class”。它正在为我运行..这就是为什么我很困惑!如果您希望我证明这一点,我可以将文件发送给您。
  • @black:不要那样做。把它写出来,编译它并在它的纯状态下运行它。
  • @HFE: 啊好吧,会试试.......顺便说一句,如果我运行带有参数的类文件,你认为JVM不需要main方法吗?所以我将我的 args 直接传递给 IntArgsTest 类的构造函数?
【解决方案2】:

好吧,您可以使用名称为main 的任何方法,并带有任意数量的参数。但是 JVM 会寻找具有确切签名 public static void main(String[])main 方法。

您定义的main 方法只是该类的另一个方法。

我现在无法访问 Windows,但让我过会儿试试。我确实尝试过 Fedora,当然我得到了以下异常:

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

请注意,由于上述原因,该类可以正常编译。

更新:我在 Windows 7 上测试过,结果是一样的。我很惊讶你说它对你有用。

【讨论】:

  • 当我将它解压缩到 .class 文件并在命令中运行它时,它对我有用……它在 Eclipse 中对我不起作用,它给了我类似的消息。感谢您的回复!
【解决方案3】:

此代码实际上不会运行。当代码编译时(因为你不需要 main 来编译),当你尝试运行它时,你会得到一个 "Main method not found" 错误。

更好的是,当我运行它时,它说

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

【讨论】:

  • 感谢您的回复。关于您上面引用的错误消息:当我尝试在 Eclipse 上运行它时,它给了我相同的消息。您是否尝试提取 .class 文件并从命令行运行它?它似乎工作正常。
  • 是的,我从命令行运行它(事实上,Eclipse 不会将其视为 Java 应用程序,因此除非您自己设置应用程序,否则无论如何您都无法运行它)。这不可能,我怀疑你没有在从String args[] 切换到int args[] 之间重新编译。
【解决方案4】:

此代码包含不起作用的 public static void main (int[] args)。因为 JVM 将参数值作为 string 参数。它不需要任何 int 参数。因此,如果我们想要一个 int 参数意味着我们必须将字符串参数转换为整数参数。运行此代码需要有效的主方法(例如:public static void main(String args[])

【讨论】:

    猜你喜欢
    • 2016-05-22
    • 1970-01-01
    • 2018-11-12
    • 2015-05-30
    • 2023-02-22
    • 1970-01-01
    • 2012-08-10
    • 1970-01-01
    相关资源
    最近更新 更多