0

Object是 中所有类的超类型Java。考虑我的以下课程

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) {

 }
} 

为什么java不给这个机会,而这object是所有班级的终极晚餐类型java

4

7 回答 7

2

Java的主要方法是用字符串作为参数指定的。所以编译器无法检测到以对象为参数的主方法。我想这是因为 main 方法通常被称为控制台命令,并且您只有机会将字符串设置为参数。

于 2013-08-13T09:28:29.590 回答
2

因为 javapublic static void main(String[] args)在运行时会显式查找。 在 jls 的 12.1.4 中指定

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

对象没有意义,因为您不能通过控制台传递其他对象。

于 2013-08-13T09:32:04.830 回答
1

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

  1. “因为”。程序的 main() 入口点是这样指定的,不能重载以接受其他参数
  2. 正如 assylias 所暗示的,main() 方法应该从命令行或 shell 调用。这意味着争论将永远是字符串。您在命令行上键入的任何内容都是字符串。
于 2013-08-13T09:28:56.277 回答
1

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

来自JLS

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

public static void main(String[] args)

public static void main(String... args)
于 2013-08-13T09:29:19.240 回答
1

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

尽管如此,我也认为 Object 是超类,所以为什么 jvm 不理解它,但还有一点是,如果 jvm 允许接受 Object 参数,那么用户也可以传递非字符串变量,所以 jvm 会产生错误,这就是我的原因认为 jvm make 限制传递字符串变量。

于 2013-08-13T09:46:00.677 回答
1
  1. JVM 将 main() 作为线程调用。当我们从 java 中的另一个方法调用 main() 时,我们将其称为函数或方法。
  2. 实际上,这里的困惑是“为什么当我们尝试从控制台调用 main(Object args) 时自动转换不适用”。可能是这个限制已经放在 JVM 的本地方法中以避免复杂性。
  3. 我你们观察到相同的情况,你会发现 catch(Object e) 总结行:它是 JVM 的本地方法代码,它限制了自动转换,以避免复杂化。
于 2018-08-02T05:44:29.417 回答
-1

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

main方法也可以这样写

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

 }
于 2013-08-13T09:29:01.203 回答