How do Java programs run without defining the main method?

45,729

Solution 1

The main method is only used when the Java Virtual Machine is executing your code. Code cannot be executed without a main method but it can still be compiled.

When compiling code, you usually specify a set of files on the command line e.g.

javac MyClass1.java MyClass2.java

The Java compiler (javac) examines each class you passed to it and compiles it into a .class file.

One reason Java source code may be missing a main method is because it is designed to be used as a library, instead of being executed.

Something you may find interesting: although the source code compiled by the Java compiler does not need a main method, the source code for the Java compiler itself does have a main method.

Solution 2

There is a difference between running and compiling. Java code can be compiled incrementally. You only need a main somewhere to run the code. Java "knows where to start" because the compiler is smart enough to arrange all the dependencies when you compile.

Indeed, if you are building a web application in some sort of standard container, your code probably won't have a main method. The container does, but you just write components that plug in.

Solution 3

// works only on java 1.6 or less versions

public class Test{   
    // this is static block

    static{
        System.out.println("This is static block");  
    }
}

In Java (while running):

  1. all static members are identified.
  2. all variables and methods are initialized
  3. static block is executed

Solution 4

how does Java compile run your source without knowing where to start?

I assume you meant run (instead of compile), since you don't need a main() to compile. In which case, an explicitly declared main() method is only one of the ways to run a program. You can use some frameworks to execute your code. They have got the main() (talking about console applications only) and require you to declare an entry point only. This is how you run unit tests, for example.

Share:
45,729
Korvin Szanto
Author by

Korvin Szanto

I'm a Senior Developer for PortlandLabs, the company behind concrete5.

Updated on October 25, 2021

Comments

  • Korvin Szanto
    Korvin Szanto over 2 years

    I was looking through some Java source and noticed that the main method wasn't defined.

    How does Java compile source code without knowing where to start?

  • zpon
    zpon over 9 years
    Hi coco and welcome to Stack Overflow. Just a hint for your first post: Please consider adding some explanatory text of how and why this works, preferably with references to documentation of the method.
  • user207421
    user207421 over 4 years
    'Static members are identifed' is meaningless; 'all variables ... are initialized' is false; and 'methods are initialized' is meaningless. In Java 6 and earlier, maybe later too, the given output will be followed by a java.lang.NoSuchMethodError for main().
  • user207421
    user207421 over 4 years
    Followed by a java.lang.NoSuchMethodError.
  • user207421
    user207421 over 4 years
    'Its not working in Java 7 which is said to be supported in Java 8' is meaningless.
  • Admin
    Admin over 2 years
    Your answer could be improved with additional supporting information. Please edit to add further details, such as citations or documentation, so that others can confirm that your answer is correct. You can find more information on how to write good answers in the help center.