为什么编译器不能在具有2个类的源文件中找到我的公共类?

时间:2018-06-09 05:40:16

标签: java eclipse

我在一个Java源文件中有两个类,源文件的名称与公共类相同。当我运行源文件时,我收到以下错误:

enter image description here

 package inheritance;

 class clsnae {

    public static void main(String[] args) {
        // TODO Auto-generated method stub
        System.out.println("first");
    }
}

  public  class clsname {

     public static void main(String[] args) {
            // TODO Auto-generated method stub
            System.out.println("second");
     }
}
  1. 我可以知道为什么我的编译器或JRE找不到我的其他文件(非公共文件)吗?
  2. 如果我删除了public关键字,则只打印“ first ”和 second ”,但添加后类名的public关键字,为什么它仍然尝试运行第一个类而不是运行第二个类?

2 个答案:

答案 0 :(得分:2)

您的代码很好。有两种main方法,您可以一次运行任何方法。

第一次 eclipse 会问你运行哪个main方法。 如果您想稍后更改,可以修改您的run configurations并选择main class

转到运行配置: enter image description here

然后选择main类:

enter image description here

以下是示例运行:

enter image description here

答案 1 :(得分:0)

这与Java规范有很大关系。 规则说如果你将一个类声明为public,那么该类所在文件的名称必须具有相同的名称。

但是,如果您在定义班级时未指定公共修饰符,则同样的规则也不适用。所以你可以使用任何类名保存文件。

在您的情况下违反规则1。

有关详细信息:请参阅以下答案: Why are filenames in Java the same as the public class name?

由于有两个主要方法,Eclipse将提示您使用main方法执行的类。在当前的课程中。

enter image description here