I'm afraid there's quite a lot of misinformation in the above responses. Unfortunately, to understand why, it's necessary to know rather more than a beginner typically wants about how a Java application starts up.
The Java Language Specification
specifies that the standard entry point for a Java program is main() and that it is static. However, they could have specified a different method and they could have made it non-static; they just had to make some choice.
The entry point is something that the Java application launcher implements. A launcher program is the native program that creates a JVM, finds the initial class[es] and runs the initial method[s] (the "entry point[s]"). These programs are written using the Java Invocation Interface, which is part of the Java Native Interface.
The typical JDK and JRE come with the "java[.exe]" launcher. It is this launcher that dictates that the program's entry point is main() and that it is static.
I could (and have) write a launcher that runs a different method than main. I could (but haven't) write a launcher that instantiated an object of some class then ran a non-static method.
Regarding C++, the main() entry point in C++ is actually a C function. As such, it is rather outside the object-oriented world. If you declare a C function static, it means something different to what it does in Java or C++ (it's closer to "private", actually). However, any C function is more like a static method than it is like a non-static method.