DrJava 告诉我没有 main,但 main 是在 class 声明中定义的
DrJava tells me there's no main, but main is defined within the class declaration
我正在尝试使用 DrJava 学习 Java。
当我尝试 运行 这段代码时,DrJava 告诉我:
Static Error: This class does not have a static void main method accepting String[].
我不明白为什么 DrJava 告诉我没有主电源。这是 class canine 声明之后的第一行;而且我没有看到任何拼写错误或缺少标点符号。
我尝试用谷歌搜索这个,但我不明白什么 they were talking about。
如果有人能以一种实际上并没有给我答案,而是让我自己弄清楚为什么会发生在我身上的方式告诉我,那就太好了——但如果问题太严重基本创造一个学习机会,然后我会采取解决方案;我猜。
/*
* This is an exercise designed to practice creating a class Animal
* And then creating another class canine in which to create an object dog.
* The reason I want to call from one class to another is because I want
* to understand how classes, objects, inheritance, etc. works.
* Clearly, class canine is -in my mind at least, a child of class Animal.
* The main method of canine then calls method attributes I think are being
* inherited by dog and wolf,from the class Animal.
*/
public class Animal {
void growl() {
System.out.println("Grrr");
}
void bark() {
System.out.println("Arf! Arf!");
}
}
class canine {
public static void main(String[]args) {
Animal dog = new Animal();
dog.bark();
Animal wolf = new Animal();
wolf.growl();
}
}
代码 运行 使用 java
命令行工具就可以了:java canine
当您执行 java canine
时,您将告诉 java
工具查找并加载 canine
class 和 运行 它的 main
方法。
如果您使用的是 java Animal
,问题是 Animal
没有 main
。 canine
确实如此。
Clearly, class canine is -in my mind at least, a child of class Animal
不,除了 canine
在其 main
中使用 Animal
之外,canine
和 Animal
之间没有任何关系。例如,canine
依赖于 在 Animal
上,但与它没有其他关系。如果你想让它成为一个 subclass("child class" 的一个相当合理的解释),你可以在它的声明中添加 extends Animal
。如果你想让它成为 nested class("child class" 的另一个相当合理的解释),你可以把它放在 inside Animal
.
来自您的评论:
But I still don't understand why DrJava is telling me that it doesn't have a static void main method accepting String[]. Also, It's not printing anything, when I run on DrJava.
我想你把 canine
和 Animal
放在同一个文件中,使 Animal
public,然后期待你混淆了 DrJava DrJava 弄清楚它应该 运行 canine.main
而不是 Animal.main
。请参阅下面有关最佳做法的说明。
来自另一条评论:
but doesn't dog.bark()
directly call the function in Animal
? Why do I need to "extend" in this scenario?
你不知道。 class 可以使用另一个 class 而它们之间没有任何继承关系,就像您的代码那样。您在评论中使用了术语 "child class",表明您打算继承或类似。
旁注:虽然您不必遵循它们,但遵循标准 Java 命名约定是一种很好的做法。 Class 名称应以首字母大写和驼峰式命名。所以 Canine
而不是 canine
.
旁注 2:与 一样,最好将每个 class 放在自己的 .java
文件中,并以 class 的名称命名。从技术上讲,您可以将非 public class 放在任何 .java
文件中(这就是该代码在 Animal.java
中使用 canine
的原因),但一般来说,同样,最佳做法是将它们分开。所以你会有 Animal.java
包含 Animal
class,canine.java
包含 canine
class(或者更好,Canine.java
包含 Canine
class).
我正在尝试使用 DrJava 学习 Java。
当我尝试 运行 这段代码时,DrJava 告诉我:
Static Error: This class does not have a static void main method accepting String[].
我不明白为什么 DrJava 告诉我没有主电源。这是 class canine 声明之后的第一行;而且我没有看到任何拼写错误或缺少标点符号。
我尝试用谷歌搜索这个,但我不明白什么 they were talking about。
如果有人能以一种实际上并没有给我答案,而是让我自己弄清楚为什么会发生在我身上的方式告诉我,那就太好了——但如果问题太严重基本创造一个学习机会,然后我会采取解决方案;我猜。
/*
* This is an exercise designed to practice creating a class Animal
* And then creating another class canine in which to create an object dog.
* The reason I want to call from one class to another is because I want
* to understand how classes, objects, inheritance, etc. works.
* Clearly, class canine is -in my mind at least, a child of class Animal.
* The main method of canine then calls method attributes I think are being
* inherited by dog and wolf,from the class Animal.
*/
public class Animal {
void growl() {
System.out.println("Grrr");
}
void bark() {
System.out.println("Arf! Arf!");
}
}
class canine {
public static void main(String[]args) {
Animal dog = new Animal();
dog.bark();
Animal wolf = new Animal();
wolf.growl();
}
}
代码 运行 使用 java
命令行工具就可以了:java canine
当您执行 java canine
时,您将告诉 java
工具查找并加载 canine
class 和 运行 它的 main
方法。
如果您使用的是 java Animal
,问题是 Animal
没有 main
。 canine
确实如此。
Clearly, class canine is -in my mind at least, a child of class Animal
不,除了 canine
在其 main
中使用 Animal
之外,canine
和 Animal
之间没有任何关系。例如,canine
依赖于 在 Animal
上,但与它没有其他关系。如果你想让它成为一个 subclass("child class" 的一个相当合理的解释),你可以在它的声明中添加 extends Animal
。如果你想让它成为 nested class("child class" 的另一个相当合理的解释),你可以把它放在 inside Animal
.
来自您的评论:
But I still don't understand why DrJava is telling me that it doesn't have a static void main method accepting String[]. Also, It's not printing anything, when I run on DrJava.
我想你把 canine
和 Animal
放在同一个文件中,使 Animal
public,然后期待你混淆了 DrJava DrJava 弄清楚它应该 运行 canine.main
而不是 Animal.main
。请参阅下面有关最佳做法的说明。
来自另一条评论:
but doesn't
dog.bark()
directly call the function inAnimal
? Why do I need to "extend" in this scenario?
你不知道。 class 可以使用另一个 class 而它们之间没有任何继承关系,就像您的代码那样。您在评论中使用了术语 "child class",表明您打算继承或类似。
旁注:虽然您不必遵循它们,但遵循标准 Java 命名约定是一种很好的做法。 Class 名称应以首字母大写和驼峰式命名。所以 Canine
而不是 canine
.
旁注 2:与 .java
文件中,并以 class 的名称命名。从技术上讲,您可以将非 public class 放在任何 .java
文件中(这就是该代码在 Animal.java
中使用 canine
的原因),但一般来说,同样,最佳做法是将它们分开。所以你会有 Animal.java
包含 Animal
class,canine.java
包含 canine
class(或者更好,Canine.java
包含 Canine
class).