📜  Java中关于文件名和类名的神话

📅  最后修改于: 2022-05-13 01:55:20.952000             🧑  作者: Mango

Java中关于文件名和类名的神话

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

Java
/***** File name: Trial.java ******/
public class Geeks {
    public static void main(String[] args)
    {
        System.out.println("Hello world");
    }
}


Java
/***** File name: Trial.java ******/
class Geeks {
    public static void main(String[] args)
    {
        System.out.println("Hello world");
    }
}


Java
/*** File name: Trial.java ***/
class ForGeeks {
    public static void main(String[] args)
    {
        System.out.println("For Geeks class");
    }
}
  
class GeeksTest {
    public static void main(String[] args)
    {
        System.out.println("Geeks Test class");
    }
}


Java
// Program to find area of triangle
class Triangle {
    int x, y;
    void printArea()
    {
        System.out.println("Area of triangle is: " + x * y / 2);
    }
}
  
class Demo {
    public static void main(String args[])
    {
        // Object creation
        Triangle t = new Triangle();
        t.x = 10;
        t.y = 13;
        t.printArea();
    }
}


输出:

javac Trial.java
Trial.java:9: error: class Geeks is public, should be
                    declared in a file named Geeks.java
public class Geeks
^
1 error 


但是可以通过编译上述文件的方式违反神话。

Java

/***** File name: Trial.java ******/
class Geeks {
    public static void main(String[] args)
    {
        System.out.println("Hello world");
    }
}

第1步:

javac Trial.java


第 1 步将创建一个 Geeks.class(字节码),没有任何错误消息,因为该类不是公开的。
第2步:

java Geeks


现在输出将是Hello world
只有当类在public中声明时,关于文件名和类名的神话才应该相同。
上述程序的工作原理如下:

javaex

现在,这个.class文件可以被执行了。通过以上特点,可以创造更多的奇迹。一个Java文件中可以有很多类。出于调试目的,可以使用这种方法。每个类都可以单独执行以测试它们的功能(仅在一个条件下:不应使用继承概念)。
但总的来说,遵循神话是好的。
示例 1:

Java

/*** File name: Trial.java ***/
class ForGeeks {
    public static void main(String[] args)
    {
        System.out.println("For Geeks class");
    }
}
  
class GeeksTest {
    public static void main(String[] args)
    {
        System.out.println("Geeks Test class");
    }
}

将上述文件编译为javac 时试一试。 Java这将创建 2 个 .class 文件作为ForGeeks.class 和 GeeksTest.class
由于每个类都有单独的 main() 存根,因此可以单独测试它们。

  • 执行Java ForGeeks时,输出为For Geeks class
  • 执行Java GeeksTest时,输出是Geeks Test class

示例 2:

Java

// Program to find area of triangle
class Triangle {
    int x, y;
    void printArea()
    {
        System.out.println("Area of triangle is: " + x * y / 2);
    }
}
  
class Demo {
    public static void main(String args[])
    {
        // Object creation
        Triangle t = new Triangle();
        t.x = 10;
        t.y = 13;
        t.printArea();
    }
}

注意:这里有两个类, TriangleDemo 。那么必须将哪个类名视为文件名呢?
类名 Demo 必须作为文件名。之所以取 Demo 作为文件名,是因为它有 main 方法,并且从 main 方法开始执行。

Filename: Demo.java
Compilation: javac Demo.java
Run: java Demo
Output: Area of triangle:65