Head First Java 问题 - 找不到主要方法

Posted

技术标签:

【中文标题】Head First Java 问题 - 找不到主要方法【英文标题】:Head First Java Problem- Main method not found 【发布时间】:2020-04-08 06:22:58 【问题描述】:

我已经在互联网上搜寻了一个解决方案,但我仍然不明白为什么我会收到以下错误消息:

"错误:在 DrumKit 类中找不到主方法,请定义主方法 方法为:public static void main(String[] args) 或 JavaFX 应用程序类必须扩展 javafx.application.Application"

这是我的代码:

DrumKit.java

class DrumKit 
    boolean topHat = true;
    boolean snare = true;

    void playTopHat() 
        System.out.println("ding ding da-ding");
    

    void playSnare() 
        System.out.println("bang bang ba-bang");
    

DrumKitTestDrive.java

class DrumKitTestDrive 
    public static void main(String [] args) 

        DrumKit d = new DrumKit();
        d.playSnare();
        d.snare = false;
        d.playTopHat();
        if (d.snare == true) 
            d.playSnare();
        
    

我正在使用 InteliJ,我输入命令 javac DrumKitTestDrive.java 后跟 java DrumKit.

这是来自 Head First Java 系列的一个练习,我的答案与书中的答案完全相同。但是我还是遇到这个错误。

【问题讨论】:

【参考方案1】:

main 方法在 DrumKitTestDrive.java 中,而不是在 DrumKit.java 中。因此,您必须输入java DrumKitTestDrive 才能运行该程序。

请注意,与其他答案声称的相反,具有main 绝对不是public。但是,main 方法 必须是 public。请参阅 Java 语言规范的 chapter 12。顺便说一句,在 JLS 的大多数示例中,类没有修饰符。 this answer 已经解决了这个问题。

【讨论】:

【参考方案2】:

包含main 方法的类必须是public

public class DrumKitTestDrive 
    public static void main(String [] args) 

        DrumKit d = new DrumKit();
        d.playSnare();
        d.snare = false;
        d.playTopHat();
        if (d.snare == true) 
            d.playSnare();
        
    

有关访问修饰符的更多信息,请参阅https://docs.oracle.com/javase/tutorial/java/javaOO/accesscontrol.html

您还尝试运行没有主要方法的类DrumKit。你必须运行java DrumKitTestDrive

【讨论】:

@KOF 你能解释一下为什么你不接受我的回答吗? 我只能猜测,但你的第一句话是错误的。 @bastet 你为什么这么认为? 有趣的问题。好吧,打开 JLS,查找“public static void main(”并计算有多少类是“public”的。我当然更愿意为您指出正确的章节,但我没有发现它明确说明(也没有当然相反):唯一声明的约束是main 必须是公开的。但是,规范中的数十个示例对我来说似乎已经足够了。我还可以问:为什么让你认为你是对的? @bastet:我也可以问:为什么让你认为你是对的?对不起,我问你了。我从不使用没有 public 修饰符的主类。

以上是关于Head First Java 问题 - 找不到主要方法的主要内容,如果未能解决你的问题,请参考以下文章

java中找不到主类是啥问题

HTTP 状态 500 - javax.el.PropertyNotFoundException:在 java.lang.String 类型上找不到属性“first_name”

在CMD下用java命令出现“找不到或无法加载主类”问题

在CMD下用java命令出现“找不到或无法加载主类”问题

java运行显示“找不到或无法加载主类”!

找不到或无法加载主类java(找不到或无法加载主类helloworld)