Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/316.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 具有类名和文件名的main方法_Java_Eclipse_Main - Fatal编程技术网

Java 具有类名和文件名的main方法

Java 具有类名和文件名的main方法,java,eclipse,main,Java,Eclipse,Main,我的文件名是Temp.java,里面有这个。我正在使用EclipseIDE /*package*/ class Test { public static void main(String args[]) { System.out.println("test"); } } 所以我无法将其作为java应用程序运行。我把我的班名改成临时工 class Temp { .... } 现在我可以了。有人能解释一下原因吗?文件中的类(应该运行main)必须与文件同名。如果

我的文件名是Temp.java,里面有这个。我正在使用EclipseIDE

/*package*/ class Test {
    public static void main(String args[]) {
        System.out.println("test");
    }
}
所以我无法将其作为java应用程序运行。我把我的班名改成临时工

class Temp {
 ....
}

现在我可以了。有人能解释一下原因吗?

文件中的类(应该运行
main
)必须与文件同名。如果该类不是公共类(如您的情况),则该类将编译,但无法运行,因为Eclipse尝试根据文件名加载该类。

这可能是Eclipse的一个限制。代码在命令行中运行良好

据我所知,您正试图将单元测试嵌入到与被测类相同的文件中。这是个好主意,我完全同意。你可以阅读更多关于如何成功的文章。通常,他建议将测试放在静态内部类中,而不是放在同一文件中的独立类中


Netflix Hystrix框架中的一个示例:

下面的代码位于
Temp.java
中,可以很好地编译和运行Netbeans:

class Whatever {

    public static void main(String[] args) {
        System.out.println("hello");
    }
}

问题在于eclipse,我认为您试图使用
右键单击->运行方式->Java应用程序运行,不幸的是,如果类不是公共的,eclipse没有显示此选项。
但是您仍然可以使用
Alt+Shift+X,J
运行该类。
这不是Java的问题,而是Eclipse的问题。

文件名应该与类名相同,该类名是公共的,并且具有main()方法。在第一种情况下,文件名Temp.java将编译并创建Test.class文件而不是Temp.class,因为文件中没有声明Temp类

创建.class文件后,使用
java测试运行它

下面是一个例子

//Filename abc.java
public class hi
{
public static void main(String[] args)
{
 System.out.println("Hell");
}
}
输出

abc.java:1: class hi is public, should be declared in a file named hi.java
public class hi
       ^
1 error
但是如果你这样做

 //Filename abc.java
    class hi
    {
    public static void main(String[] args)
    {
     System.out.println("Hell");
    }
    }
它将创建hi.class文件,以便

D:\>java hi
Hell

@这与主方法和类有关name@null对不起,我错过了。值得一提的是,两者都是在Netbeans中编译的。我认为这不应该太接近,这与eclipse、文件名、类名和main方法有关。检查“assylias”的答案,它在netbeans上起作用。如果该类是公共类,则这是正确的,您可以将许多非公共类放入一个.java文件中。@null确定,它不是公共类,因此可以编译。但是您已经询问了为什么它没有运行。+1的问题在于eclipse,,,它没有显示类名和文件名是否不同,是否与public无关。