See this link (Requires an account!) It is a bug! But Sun has closed the problem saying "It won't be fixed" with the comment "The runtime allows call to private methods, because of reflection. Fixing it will cause potential troubles." It violates the Encapsulation for sure!
Explanation by Kathy Sierra (to appear in the new SCJP FAQ):
Question: Is it allowed to declare the main method private? Answer: Provided by Kathy Sierra Former JVM versions (pre-1.4) allowed the main method to have any accessibility (private, etc). This incompatibility with Section 12.1.4 of the Java Language Specification has been fixed as of version 1.4. In order to invoke a main method from the command-line, it is now mandatory to declare the main method as follows: public static void main (String args) If the main method has any access level other than public, it will no longer run from the command-line.