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 问题 - 找不到主要方法的主要内容,如果未能解决你的问题,请参考以下文章
HTTP 状态 500 - javax.el.PropertyNotFoundException:在 java.lang.String 类型上找不到属性“first_name”