📜  关于Java中文件名和类名的误解

📅  最后修改于: 2020-02-10 15:24:32             🧑  作者: Mango

在Java课堂上的第一个讲义是“在Java中文件名和类名应该相同”。违反上述规则时,将出现如下编译错误消息

/***** 文件名: Trial.java ******/
public class mango
{
   public static void main(String[] args) {
        System.out.println("Hello world");
   }
}

输出:

Javac Trial.Java
Trial.Java:9: error: class mango is public, should be
                    declared in a file named mango.Java
public class mango
^
1 error

但是以这种方式编译上述文件可能会违反规则。

/***** 文件名: Trial.java ******/
class mango
{
    public static void main(String[] args) {
        System.out.println("Hello world");
    }
}

步骤1:

javac Trial.java

步骤1将创建一个mango.class(字节码),而不会出现任何错误消息,因为该类不是公共public的。

步骤2:
java magno

现在输出将是Hello world
仅当在公共目录中声明类时,有关文件名和类名才应该相同。
以上程序的工作原理如下:


现在,可执行此.class文件。通过以上功能,可以实现更多奇迹。Java文件中可能有许多类。出于调试目的,可以使用此方法。每个类都可以单独执行以测试其功能(不应使用继承概念)。
但是总的来说,遵循规则是好的。
例如:

/*** 文件名: Trial.java ***/
class ForMango
{
   public static void main(String[] args){
      System.out.println("For 芒果 class");
   }
}
class MangoTest
{
   public static void main(String[] args){
      System.out.println("芒果 Test class");
   }
}

当上述文件编译为Javac时,Trial.java将创建两个.class文件,例如ForMango.class和MangoTest.class
由于每个类都有单独的main()存根,因此可以单独对其进行测试。
Java ForMango执行输出是For 芒果 class
Java MangoTest执行输出是芒果 Test class