Main method has to strictly follow its syntax; other wise JVM will not be able to locate it and your program will not run.
They are public because they must be accessible to the JVM to begin execution of the program.If it is not public then only the class and the package members can access it and JVM cannot.
Main is the first method that would get executed in any class. They are static because they must be available for execution without an object instance.