Can we declare main() method as a non-static?

No, main() method must be declared as static so that JVM can call main() method without instantiating its class. If you remove ‘static’ from main() method signature, the compilation will be successful but the program fails at runtime. 
If the main() method was not declared static than JVM has to create an instance of main Class and since constructor can be overloaded and can have arguments there would not be any certain and consistent way for JVM to find the main() method in Java.
Below diagram demonstrates that the main() method should be static otherwise JVM will throw runtime error:

Comments