When you run java MyProgram, the JVM needs an entry point to start executing your code. That entry point is the main method. But here is the catch: no objects exist yet when the program starts.
If main were an instance method, Java would need an object to call it on. But creating that object would require running code, which would need an entry point... and you are stuck in a loop. Making main static solves this. The JVM calls MyProgram.main(args) directly on the class without creating any object.
This is also why main has the exact signature public static void main(String[] args). Change any part of it and the JVM will not recognize it as the entry point.