Consider a class that extends
Thread and also contains main().
Do we really want the jvm to create an extra instance of our class that has no other purpose but to contain main()? What should happen in a constructor that does useful work like calling start()? We don't want the jvm, which has already started the main thread, starting another thread prematurely.
Of course, we could require main() to be in a separate class with no other purpose, but then what is the point of instantiating it? Methods like main() that serve the overall purposes of the class or application and are not specifiically directed at one instance should be static.