I am trying to understand why main method must have to be public . one reason I read is that because it is the entry point and invoked automatically from outside as a result of execution of the source file .
Now it that is the case why the class in which the main method is defined does not have to be public ?
I am trying to simply understand the concept behind why main method must be public but the class in which main method is defined does not have to be public since it seems to me as contradicting ...
You're overthinking it. Ultimately, these rules were chosen for convenience of the implementor (i.e., the folks at Sun who write JVMs.) There are really no compelling, logical reasons -- it's just what made things easiest for them.
I think some of the rules of how default access works were chosen to make it easier for beginners to run programs without necessarily understanding how packages and access modifiers work. Other rules were made without this consideration. So some rules are a bit inconsistent or weird - this is one of them. One other thing to realize is that many decisions were made early in the history of Java when there was a lot of excitement a nd pressure to get a release out the door quickly. Those decisions weren't always erfectly logical and consistent. But as long as the result is not too badly broken, Sun is very reluctant to change such behavior now, as it might break programs for people who are obeying the rules of the language as originally stated. So there are various bits of weirdness like this that we just live with now.
one reason I read is that because it is the entry point and invoked automatically from outside as a result of execution of the source file .
Remember, we cannot have a private class. Actually, java syntax allows the public static void main(String a) to reside only in the class that is defined as public modifier or no modifier and not private modifier. (note: no modifier is different from private modifier)
note that main() is static, so that, even if we create multiple instances of the class that contains main(), we are going to have only on main() common to all (that is, we can access it without instance).
since main() is being an entry point and follows template design pattern, in most of the cases it is where you are going to instantiate other classes and you are not going to instantiate the class containing the main method from other classes.
So, i think java developers had this flexibility in mind while developing it.
Thanigaivel S. [ June 15, 2006: Message edited by: S Thanigaivel ]