2

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

/*package*/ class Test {
    public static void main(String args[]) {
        System.out.println("test");
    }
}

所以我无法将它作为 java 应用程序运行。我将班级名称更改为 Temp

class Temp {
 ....
}

现在我能。有人可以解释一下为什么吗?

4

5 回答 5

6

这可能是 Eclipse 的限制。代码从命令行运行良好。

据我了解,您正在尝试将单元测试与被测类嵌入到同一个文件中。这是个好主意,我完全同意。您可以在Ben J. Christensen 的博客文章中阅读更多关于如何取得成功的信息。通常,他建议将测试放在静态内部类中,而不是放在同一文件中的独立类中。

来自 Netflix Hystrix 框架的示例:HystrixCircuitBreaker.UnitTest

于 2012-12-06T11:40:24.083 回答
1

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

于 2012-12-06T11:37:24.863 回答
1

下面的代码位于 中Temp.java,可以在 Netbeans 中正常编译和运行:

class Whatever {

    public static void main(String[] args) {
        System.out.println("hello");
    }
}
于 2012-12-06T11:47:41.103 回答
1

问题出在 Eclipse 上,我认为您正在尝试运行 using right click -> run as -> Java Application,不幸的是,如果课程不公开,则 Eclipse 不会显示此选项。但是您仍然可以使用Alt+Shift+X,J. 它不是 Java 的问题,而是 Eclipse 的问题。

于 2012-12-06T11:59:54.160 回答
1

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

创建 .class 文件后,运行它java Test

所以这是一个例子

//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
于 2012-12-06T12:19:51.277 回答