Java Source File Rules: Naming, Public Classes, and Compilation Explained

Learn the essential rules for writing Java source files, including file naming conventions, public class restrictions, main method behavior, and how the compiler handles errors.

By Updated Java + Backend
Illustration for Java Source File Rules: Naming, Public Classes, and Compilation Explained

When writing a Java program, it's not just your syntax that matters — the structure of your source file plays a critical role in how your code compiles and runs. Let's explore the most important rules Java developers must follow when declaring and organizing a .java file.


📌 1. File Naming and Extensions

Every Java source file must end with the .java extension.
Example:

HelloWorld.java

You can name the file anything as long as there is no public class inside it. However, if a source file contains a public class, the file name must match the class name exactly (including case).

✅ Correct:

public class Main {}
// File name: Main.java

❌ Incorrect:

public class Main {}
// File name: Test.java → Compilation Error

👥 2. Number of Classes per File

You can define multiple classes, interfaces, enums, or annotations in a single .java file. However:

  • Only one public type is allowed per file.
  • Each non-public type can have any name, and the compiler will still generate separate .class files for each.
class Animal {}
class Dog {}
public class Main {}
// Must be saved as Main.java

🚀 3. The Role of the Main Method

Any class (public or not) can contain a public static void main(String[] args) method.

During execution:

java ClassName
  • The JVM looks for the class specified in the command and checks if it contains a valid main() method.
  • If found, it executes it. If not, you'll get an error.

🛠️ 4. Compilation Behavior

When compiling your file using:

javac FileName.java

Java performs the following steps:

  1. Syntax Check: All code is validated for syntax errors. If any are found, no .class files are generated.
  2. Type-by-Type Validation: If syntax is fine, each declared type is checked in order.
  3. Class File Generation: If a type is valid, a .class file is created for it.

To see what's happening during compilation, use:

javac -verbose FileName.java

This shows you every class file being loaded and compiled.


📦 5. Package and Import Declarations

  • A package statement, if used, must be the first line of the source file.
  • import statements come next.
  • Class, interface, or enum declarations follow.

✅ Order of declarations:

package com.example;

import java.util.*;

public class Main { ... }

You can have any number of import statements, and both package and import declarations apply to all types declared in the file.


🧠 Final Thoughts

Understanding source file structure isn’t just academic — it’s essential for building real-world Java projects, working with IDEs, or preparing for interviews. These rules ensure your Java code is portable, maintainable, and error-free during compilation.

💡 Pro Tip: Even seasoned Java developers run into simple compilation issues due to naming mismatches or misplaced public classes. Stick to the rules — and your builds will thank you.

Part of a Series

This tutorial is part of our Java Fundamentals . Explore the full guide for related topics, explanations, and best practices.

View all tutorials in this series →