java中的main方法只接受String []

时间:2013-08-13 09:25:45

标签: java main

ObjectJava中所有类的超类型。考虑我的以下课程

public class Test {
public static void main1(Object[] args) {
    System.out.println("I accept an object array");
}
public static void main(String[] args) {
   main1(args);
}
}

由于object优势object数组可以接受任何object类型数组。但是,java仍未考虑以下类包含主要方法。

public class Test {   
public static void main(Object[] args) {

 }
} 

javaobject中所有类的最终晚餐类型,java永远不会给这个机会。

7 个答案:

答案 0 :(得分:2)

Java的主要方法是使用字符串作为参数指定的。因此编译器无法将对象的主方法检测为args。我想这个的原因是,主要的方法通常是由于一个控制台命令而被调用,并且你只有机会将字符串设置为参数。

答案 1 :(得分:2)

因为java在运行时显式查找public static void main(String[] args)specified in 12.1.4 of the jls

  

方法main必须声明为public,static和void。它必须指定一个形式参数(第8.4.1节),其声明的类型是String数组。因此,可以接受以下任一声明:

对象没有意义,因为你无法通过控制台传递其他对象。

答案 2 :(得分:1)

有几种方法可以回答这个问题

  1. “因为”。程序的main()入口点是这样指定的,并且可以重载以接受其他参数
  2. 如assylias暗示的那样,期望从comamnd行或shell调用main()方法。这意味着争论永远是弦乐。你在命令行上键入的是一个字符串。

答案 3 :(得分:1)

String[]用于命令行参数,字符串是用户在命令行输入的内容。无法从命令行输入对象。

来自JLS

  

方法main必须声明为public,static和void。它必须   指定一个形式参数,其声明的类型是String数组。   因此,可以接受以下任一声明:

public static void main(String[] args)

public static void main(String... args)

答案 4 :(得分:1)

有一点解释说,没有办法从控制台传递对象,所以它没有意义。

仍然我还认为Object是超类,所以为什么jvm不理解它,但还有其他一点,如果jvm允许接受Object参数,那么用户也可以传递非字符串变量,所以jvm会创建错误这就是为什么我认为jvm使限制传递字符串变量。

答案 5 :(得分:1)

  1. JVM将main()作为线程调用。当我们从Java中的另一个方法调用main()时,我们将其称为函数或方法。
  2. 实际上,这里的困惑是“为什么当我们尝试从控制台调用main(Object args)时,自动强制转换不适用”。 可能是在JVM的本机方法中加入了此限制以避免复杂性。
  3. 我你们观察到同样的情况,你会发现  捕捉(对象e) 总结:是JVM的本机方法代码,它限制了自动转换,以避免出现复杂情况。

答案 6 :(得分:-1)

传递给main方法的参数来自命令行。所以它们是String

main方法也可以像这样写

public static void main(String... args) {

 }