未找到Java主类(无错误)

问题描述:

这里是我的源代码,我将我的项目命名为Animal,但是当我运行它时。定位我的主类时出错。请帮帮我。我仍然是初学者,我很乐意学习更多。未找到Java主类(无错误)

package animal; 

public class Animal { 
    public Animal() { 
     System.out.println("A new animal has been created!"); 
    } 

    public void sleep() { 
     System.out.println("An animal sleeps..."); 
    } 

    public void eat() { 
     System.out.println("An animal eats..."); 
    } 
} 

public class Bird extends Animal { 
    public Bird() { 
     super(); 
     System.out.println("A new bird has been created!"); 
    } 

    @Override 
    public void sleep() { 
     System.out.println("A bird sleeps..."); 
    } 

    @Override 
    public void eat() { 
     System.out.println("A bird eats..."); 
    } 
} 

public class Dog extends Animal { 
    public Dog() { 
     super(); 
     System.out.println("A new dog has been created!"); 
    } 

    @Override 
    public void sleep() { 
     System.out.println("A dog sleeps..."); 
    } 

    @Override 
    public void eat() { 
     System.out.println("A dog eats..."); 
    } 
} 

public class MainClass { 
    public static void main(String[] args) { 
     Animal animal = new Animal(); 
     Bird bird = new Bird(); 
     Dog dog = new Dog(); 
     System.out.println(); 

     animal.sleep(); 
     animal.eat(); 
     bird.sleep(); 
     bird.eat(); 
     dog.sleep(); 
     dog.eat(); 
    } 
} 

请帮我这个。

+3

请张贴充分和完整的错误消息。而且你的问题令人困惑,因为你有一个错误,但你说它没有错误。它不能没有错误,否则你不会在这里问为什么它不起作用。 –

+0

另外,你的代码格式不好,特别是你的代码缩进。了解代码格式不是为了让代码“看起来不错”,而是规则可以帮助您快速查看哪些代码属于哪个范围,这有助于您调试和理解代码。为了您*的利益,您需要努力进行格式化,以便更轻松地调试问题以及*我们的*,这样我们可以更轻松地了解您的代码并为您提供帮助。这不是一个微不足道的要求。 –

+0

你如何运行你的代码? – Tom

随着研究你的代码,发现错误只能在类的修饰符(公共)你声明。

“你只能有一个公共类修饰符在Java源文件”

我们可以在这些限制单个源文件中声明一个类:

  1. 每一个源文件应包含只有一个公共类,并且该公共类的名称 应该类似于源文件的名称 文件。
  2. 如果您在源文件中声明主要方法,则主要 应该位于该公共类中。
  3. 如果源文件中没有公共类,那么主要方法 可以位于任何类中,我们可以给出源文件的任何名称。

所以.. 您的代码..

class Animal { 
     public Animal() { 
    System.out.println("A new animal has been created!"); 
    } 
    public void sleep() { 
    System.out.println("An animal sleeps..."); 
    } 
    public void eat() { 
    System.out.println("An animal eats..."); } 
    } 
    class Bird extends Animal { 
    public Bird() { 
    super(); 
    System.out.println("A new bird has been created!"); 
    } 
    @Override 
    public void sleep() { 
    System.out.println("A bird sleeps..."); 
    } 
    @Override 
    public void eat() { 
    System.out.println("A bird eats..."); 
    } 
    } 
    class Dog extends Animal { 
    public Dog() { 
    super(); 
    System.out.println("A new dog has been created!"); 
    } 
    @Override 
    public void sleep() { 
    System.out.println("A dog sleeps..."); 
    } 
    @Override 
    public void eat() { 
    System.out.println("A dog eats..."); 
     } 
     } 
    public class MainClass { 
    public static void main(String[] args) { 
     Animal animal = new Animal(); 
     Bird bird = new Bird(); 
     Dog dog = new Dog(); 
     System.out.println(); 

    animal.sleep(); 
    animal.eat(); 
    bird.sleep(); 
    bird.eat(); 
    dog.sleep(); 
    dog.eat();} 
    } 
+0

我现在明白了。我只是将主类更改为我的项目名称,并且工作正常。 – sawpaw300

理想情况下,您应该在同一个目录中将Bird,Dog和Animal放在自己的文件中。然后你创建一个更多的类,一个具有主函数的测试者类,并且由于它与Bird,Dog和Animal位于同一个目录中,所以它可以访问它们,并且可以执行你的主类所做的事情。如果你需要把它全部放在一个文件中,那么每个类头文件只需要class Bird {等等。然后将文件重命名为MainClass.java,它会运行。

请参考:Can a java file have more than one class?

简称:只能有每个java文件一个公共的*类。

所以,你应该修改你的代码:

package Animal; 

class Animal { 
    public Animal() { 
     System.out.println("A new animal has been created!"); 
    } 

    public void sleep() { 
     System.out.println("An animal sleeps..."); 
    } 

    public void eat() { 
     System.out.println("An animal eats..."); 
    } 
} 

class Bird extends Animal { 
    public Bird() { 
     super(); 
     System.out.println("A new bird has been created!"); 
    } 

等等...