繁体   English   中英

制作除字符串以外的主要接受对象?

[英]Making main accept object other than string?

是否可以让main方法接受除字符串数组之外的参数? 例如,我们可以有一个像main(Animals[]args){/*code*/}吗? 如果没有,那么为什么呢?

否 - 入口点始终是标头public static void main(String[] args) (即JVM调用此特定方法)。 你当然可以定义一个方法

public static void main(Animals[] args) {...}

但是在运行程序时不会直接执行。


编辑main方法特别具有字符串数组参数的原因是因为该数组将在程序运行时包含命令行参数 直观地说,这些应该是字符串(例如,当然不是Animal s)。

因为从命令行输入时输入的是字符串,而不是复杂类型。

因此,参数是一个指向字符串的指针(引用)数组是有意义的,包括或不包括(取决于语言)参数的计数。 在Java中,这不是必需的,因为您可以使用length

不知道你为什么要这样?

规范说它只能处理字符串数组。

没有什么能阻止你使用一个带有String以外的参数类型的public static void main。 问题是JVM需要简单的规则来识别和调用方法。 它有一个字符串数组,例如来自命令行,可以传递给程序。 在开始运行程序之前,JVM如何将其转换为Animal或其他类型的数组?

下面是一个main的示例,它采用不同的参数类型,以及程序本身处理从JVM具有的字符串数组生成Animal数组的示例。 当然,给第二个主要方法提供一个更有意义的名称真的会更好。

  import java.util.Arrays;

  public class Bad {

    public static void main(String[] args) {
      Animal[] animals = new Animal[args.length];
      for (int i = 0; i < args.length; i++) {
        animals[i] = new Animal(args[i]);
      }
      main(animals);
    }

    public static void main(Animal[] args) {
      System.out.println(Arrays.asList(args));
    }

  }

  class Animal {
    String species;

    public Animal(String species) {
      this.species = species;
    }

    public String toString() {
      return "Animal: " + species;
    }
  }

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM