 <p>This is a very interesting scenario. While in general, we can change any method which is returning void to return anything else without much impact, main method is a special case.</p> <p>In earlier programming languages, the return from main method was supposed to return exit values to the OS or calling environment.</p> <p>But in case of Java (where multi-threading concept case into picture), returning a value from main method would not be right, as the main method returns to JVM instead of OS. JVM then finishes other threads e.g. deamon threads (if any) and performs other exit tasks before exit to OS.</p> <p>Hence allowing main method to return, would have lead to a false expectation with the developers. hence it is not allowed.</p>