简而言之,主要功能行为 - 一个源文件中的多个类

nav*_*611 3 java eclipse

给定一个名为TestMainFunction.java的Java源文件

1.)正如我们大多数人所知,Java文件名必须是包含main函数的类名

请参阅以下简单代码(在上面提到的单个文件中),它完美地执行并打印ClassOne.

public class TestMainFunction {}

class ClassOne {
    public static void main(String[] a) {
        System.out.println("ClassOne");
    }
}
Run Code Online (Sandbox Code Playgroud)

2.)当单个文件中有多个具有main函数的类时,Eclipse会提示用户选择要运行的类.

请参阅以下简单代码(上面提到的单个文件),它完美地执行并打印我们从Eclipse promt中选择的类名.

public class TestMainFunction {
    public static void main(String[] a) {
        System.out.println("TestMainFunction");
    }
}

class ClassOne {
    public static void main(String[] a) {
        System.out.println("ClassOne");
    }
}

class ClassTwo {
    public static void main(String[] a) {
        System.out.println("ClassTwo");
    }
}
Run Code Online (Sandbox Code Playgroud)

以上所有内容都可以解释.它将为每个类创建单独的.class文件.即使使用内部类,相同的行为也适用.

但到底发生了什么?当一个源文件中存在多个类时,Eclipse如何知道要启动哪个类?任何人都可以解释一下吗?解释这一点将不胜感激.

Per*_*ion 6

正如大多数人所知,Java文件名必须是包含main函数的类名

这是不正确的,我相信你的困惑的来源.Java源文件只允许有一个公共类,并且它必须具有与包含文件相同的名称(减去扩展名).但是,给定的Java源文件可能包含所需数量的非公共类文件,唯一的限制是它们的名称有效.请注意,您可以拥有一个与其包含的源文件(减去扩展名)同名但不公开的类!另请注意,在单个Java源文件中包含多个顶级(非嵌套)类通常被认为是不好的做法.

您可能拥有的第二个假设是源文件中只允许一个类具有主函数.这简直是​​不真实的.您可以为每个类文件添加一个main函数 - 唯一重要的是在启动应用程序时为JVM指定的函数.

因此,考虑到您的场景 - 具有多个类文件(其中一个是公共文件)的源文件,其中每个类都有一个main方法,以下内容适用:

  • 当您在此文件中调用Eclipse中的Run命令时,Eclipse将检测到要运行多个符合条件的类,并将提示您选择其中一个类.然后它将为所选类构建一个"运行配置文件",它只启动该类.您可以通过Run-> Debug Configurations菜单实际看到Eclipse构建的配置文件.
  • 在外部编译此源文件时,它将生成多个.class文件(不只是一个).除了在同一个源文件中之外,这些类彼此没有关系,您将明确选择要在JVM中启动的.class.

即:

java TestMainFunction
java ClassOne
java ClassTwo
Run Code Online (Sandbox Code Playgroud)