Myth about the file name and class name in Java

Course Curriculum

Myth about the file name and class name in Java

Myth about the file name and class name in Java

The first lecture note given during java class is “In java file name and class name should be the same”. When the above law is violated a compiler error message will appear as below

Java

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

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

But the myth can be violated in such a way to compile the above file.

Java

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

javac Trial.java

Step 1 will create a Prutor.class (byte code) without any error message since the class is not public.
Step 2:

java Prutor

Now the output will be Hello world
The myth about the file name and class name should be same only when the class is declared in public.
The above program works as follows:

j

Now, this .class file can be executed. By the above features, some more miracles can be done. It is possible to have many classes in a java file. For debugging purposes, this approach can be used. Each class can be executed separately to test their functionalities(only on one condition: Inheritance concept should not be used).
But in general, it is good to follow the myth.
Example 1:

Java

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

class PrutorTest {
public static void main(String[] args)
{
System.out.println("Prutor Test class");
}
}
When the above file is compiled as javac Trial.java this will create 2 .class files as ForPrutor.class and PrutorTest.class .
Since each class has separate main() stub they can be tested individually.

When java ForPrutor is executed the output is For Prutor class.
When java PrutorTest is executed the output is Prutor Test class.
Example 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();
}
}
Note: There are two classes here, Triangle and Demo. Then which class name must be considered as the file name?
The class name Demo must be taken as the file name. The reason behind taking Demo as the file name is that it has the main method and execution begins from the main method.

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

Is main method compulsory in Java? (Prev Lesson)
(Next Lesson) How to run java class file which is in different directory?