微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如果未首先声明公共类,则 Java 11 不会运行 main 方法

如何解决如果未首先声明公共类,则 Java 11 不会运行 main 方法

我使用以下内容创建了以下 Chimpazee.java 文件

class Primate {
    public Primate() {
        System.out.print("Primate-");
    }
}

class Ape extends Primate {
    public Ape(int fur) {
        System.out.print("Ape1-");
    }
    public Ape() {
        System.out.print("Ape2-");
    }
}

public class Chimpazee extends Ape {
    public Chimpazee() {
        super(2);
        System.out.print("Chimpazee-");
    }
    public static void main(String[] args) {
        new Chimpazee();
    }
}

但是,当我尝试使用 Java 11 在 Windows 10 + PowerShell 上执行此文件时...

PS C:\projects\ocp-java-se\java-se-11\chapter8> java -version
java version "11.0.11" 2021-04-20 LTS
Java(TM) SE Runtime Environment 18.9 (build 11.0.11+9-LTS-194)
Java HotSpot(TM) 64-Bit Server VM 18.9 (build 11.0.11+9-LTS-194,mixed mode)

我在使用以下命令时遇到运行时错误

PS C:\projects\ocp-java-se\java-se-11\chapter8> java .\Chimpazee.java
error: can't find main(String[]) method in class: Primate

如果我将 Chimpazee 类移动到文件的开头,它工作正常。是不是假设 Java 编译这个与类的顺序无关?

解决方法

JEP 330 提到它:

要执行的类是在 源文件。它必须包含标准公共声明 static void main(String[]) 方法。

即您需要将 public class Chimpanzee 作为顶级类,如下所示:

public class Chimpanzee extends Ape {
    public Chimpanzee() {
        super(2);
        System.out.print("Chimpanzee-");
    }
    public static void main(String[] args) {
        new Chimpanzee();
    }
}

class Primate {
    public Primate() {
        System.out.print("Primate-");
    }
}

class Ape extends Primate {
    public Ape(int fur) {
        System.out.print("Ape1-");
    }
    public Ape() {
        System.out.print("Ape2-");
    }
}

然后,运行它

java Chimpanzee.java

输出:

Primate-Ape1-Chimpanzee-

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。