我在玩游戏时遇到了这种奇怪的情况:-)
Java的文档指定文件可以包含所有非公共类,并且文件名不匹配任何类。当编译后尝试运行时,即使在指定了main方法的一个类之后,它也会生成Exception。需要解释如何执行此文件的main方法。
我的测试代码在名为 NoPublicClasses.java 的文件中如下:
class Class1{
}
class Class2{
public static void main(String[] args){
}
}
它汇编得很好。但是如果你试图运行它会抛出异常。您可以在下面查看我尝试的内容
java NoPublicClasses
对于上面我预期的异常,它发生了我的预期,但是当我做了
java Class2
它也引发了意想不到的异常。所以我需要一些善意的人来解释原因,或者如果没有更改访问修饰符和文件名或类名,有任何解决方案,请告诉我。
谢谢和问候。
答案 0 :(得分: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
答案 1 :(得分:1)
你的第二个例子应该正常工作。确保您正在执行正确的类(即不要将其与文件名混淆)。引用表格JLS specification -section 1.2. Example Programs:
文中给出的大多数示例程序都可以执行,并且形式类似于:
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
。