给定名为 TestMainFunction.java
的Java源文件1。)正如我们大多数人所知,Java文件名必须是包含主函数的类名
请参阅以下简单代码(在上面提到的单个文件中),该代码完美执行并打印ClassOne
。
public class TestMainFunction {}
class ClassOne {
public static void main(String[] a) {
System.out.println("ClassOne");
}
}
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");
}
}
以上所有内容都会像我提到的那样奏效。 它将为每个类创建单独的.class文件。即使使用内部类,也会出现相同的行为。
但到底发生了什么?当一个源文件中存在多个类时,Eclipse如何知道要启动哪个类?任何人都可以解释一下吗?解释这一点将不胜感激。
答案 0 :(得分:6)
正如大多数人所知,Java文件名必须是类名 其中包含主要功能
这是不正确的,我相信你的混乱的根源。 Java源文件只允许有一个公共类, 必须 与包含文件的名称相同(减去扩展名)。但是,给定的Java源文件可能包含所需数量的非公共类文件,唯一的约束是their names are valid。请注意,您可以拥有一个与其包含源文件同名的类(减去扩展名)非公开!另请注意,在单个Java源文件中包含多个顶级(非嵌套)类通常被认为是不好的做法。
您可能拥有的第二个假设是源文件中只允许一个类具有主函数。这简直是不真实的。您可以为每个类文件添加一个main函数 - 唯一重要的是您在启动应用程序时为JVM指定的函数。
因此,根据您的方案 - 具有多个类文件(其中一个是公共文件)的源文件,其中每个类都有一个main方法,以下内容适用:
即:
java TestMainFunction
java ClassOne
java ClassTwo