1

我只是在玩的时候遇到了这个奇怪的场景:-)

Java 的文档指定文件可以包含所有非公共类,并且文件名与任何类都不匹配。当编译后尝试运行时,即使在指定了 main 方法的类之一之后,它也会生成异常。需要说明如何执行该文件的 main 方法。

我的测试代码在名为NoPublicClasses.java的文件中如下所示:

class Class1{

}

class Class2{
public static void main(String[] args){

}

}

它编译得很好。但是如果你尝试运行它,它会抛出异常。您可以在下面查看我尝试过的内容

java NoPublicClasses  

对于上述情况,我预计会出现异常,并且它按我的预期发生,但是当我这样做时

java Class2

它还抛出了意外的异常。所以我需要一些好心人来解释原因,或者如果在不更改访问修饰符和文件名或类名的情况下有任何解决此问题的方法,请告诉我。

谢谢并恭祝安康。

4

2 回答 2

2

执行 java Class2 时不应出现异常。我刚试了一下,它奏效了:

package tests;

class Class1 {
}

class Class2 {
    public static void main(String[] args) {
        System.out.println("Up and running");
    }
}

在命令行控制台中:

java tests.Class2
Up and running
于 2013-08-10T21:02:57.720 回答
1

您的第二个示例应该可以正常工作。确保您正在执行正确的类(即不要将其与文件名混淆)。引用表格JLS 规范 - 第 1.2 节。示例程序

文中给出的大多数示例程序都可以执行,并且在形式上类似于:

class Test {
    public static void main(String[] args) {
        for (int i = 0; i < args.length; i++)
            System.out.print(i == 0 ? args[i] : " " + args[i]);
        System.out.println();
    } 
}

在安装了 Oracle JDK 的机器上,存储在文件 Test.java 中的这个类可以通过给出以下命令来编译和执行:

javac Test.java 
java Test Hello, world.

产生输出:

Hello, world.

JLS 使用顶级课程不公开的程序。而且我能够按照上面的描述运行上面的例子。我使用了一个名为的文件名,尽管它在编译时AAA.java会产生一个。Test.class

于 2013-08-10T21:08:34.950 回答