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
永远不会给这个机会。
答案 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)
有几种方法可以回答这个问题
答案 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)
答案 6 :(得分:-1)
传递给main方法的参数来自命令行。所以它们是String
main方法也可以像这样写
public static void main(String... args) {
}