我预计以下代码会出现编译器问题,但令人惊讶的是它没有。
class p {
static int a = 10;
public static void main(String...args) {
System.out.println(a);
}
}
class child extends p {
public static void main(String[] args) {
System.out.println(p.a+10);
}
}
谁能告诉我:
a) 为什么编译器没有提示多个 main()
方法?
b) 当我从命令行执行上述程序时,我可以看到只有类 p 的 main()
方法被执行?这背后的理由是什么?
最佳答案
main
方法与 Java 中的任何其他方法一样,您可以在多个类上使用相同的名称和签名。
它很特别,因为要在 Java 中运行任何内容,您必须指定包含要运行的正确 main
方法的类。
您必须指定类p
才能运行:
$ java p
10
您还可以指定要运行的类child
:
$ java child
20
编译 child
类会发出警告:
Child.java:3: warning: main(java.lang.String[]) in Child cannot override main(java.lang.String...) in P; overriding method is missing '...'
但是我们已经知道静态
方法不是继承的。没关系,我们并不是想在这里继承。
此外,String...
无论如何都会解析为 String[]
,因此签名是等效的。
关于java - Java中的多个主要方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18648172/