有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

使用所有非公共类初始化Java文件,其中一个类有一个main方法

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

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

在名为noPublicClass的文件中,我的测试代码如下所示。java

class Class1{

}

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

}

}

它编译得很好。但如果您尝试运行此命令,它将抛出异常。下面你可以看看我试过什么

java NoPublicClasses  

对于上述情况,我预期会出现异常情况,并且正如我预期的那样发生,但当我这样做时

java Class2

它还引发了意外的异常。因此,我需要一些善良的人来解释原因,或者如果有任何解决方案,这个问题不改变访问修饰符和文件名或类名,请让我知道

谢谢和问候


共 (2) 个答案

  1. # 1 楼答案

    执行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
    
  2. # 2 楼答案

    你的第二个例子应该正常工作。确保您正在执行正确的类(即不要将其与文件名混淆)。引用表格JLS specification -section 1.2. Example Programs

    Most of the example programs given in the text are ready to be executed and are similar in form to:

    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();
        } 
    }
    

    On a machine with the Oracle JDK installed, this class, stored in the file Test.java, can be compiled and executed by giving the commands:

    javac Test.java 
    java Test Hello, world.
    

    producing the output:

    Hello, world.
    

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