You need the "public" so that code outside the class (namely the JVM's class loader) can call the function. You need the "static" so that the function can be called without an object (since it is not clear how one would instantiate the class, as there might be multiple constructors). It needs to be called "main" because the JVM has to have something to search for, and "main" is the canonical name. And it has to have String as its argument so that the JVM can pass in the command line arguments.
Almost. The JVM looks for a method whose signature is public static void main(String args) in the main class, which is the entry point of your program. Any other signature is valid, but will not be recognized as the entry point.