java - Java中的多个主要方法

标签 java

我预计以下代码会出现编译器问题,但令人惊讶的是它没有。

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/

相关文章:

java - 慢速角度旋转

java - 使用 while 循环和 if 语句获取随机生成的数字中每个数字的频率

Java Akka - 从父上下文向子 Actor 广播消息

java - JSP/JSTL 在表格中自动换行

java - Java 中的 OpenFile 对话框给出 null 作为响应

java - 当我从另一个屏幕返回时,上一个屏幕关闭(调用 onDestroy)

java - 用户登录时启用页面上的按钮/GWT

java - SWT:如何为文本字段重新创建默认上下文菜单

java - 为什么 Java 方法中不允许使用枚举?

java - 我想将变量设置在类的顶部而不是方法中