How do Java programs run without defining the main method?

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.


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.