Nope, we can't. Main method is a static method and therefore it belongs to the class, not to the instance of this class (object). Very good explanation has already been given here - calling a super method from a static method .
Why main method has to be static?
Because non-static main method would be interpreted as just another 'casual' method named 'main'. Your program would not even compile, because it won't be able to find THE static main method. It is perfectly legit to write something like this:
public class Demo {
public void main() {
System.out.println("Hello, this is the FAKE main body method");
}
public static void main(String [] args) {
System.out.println("Hello, this is the REAL main body method");
}
}
After compiling the above code, you would get:
"Hello, this is the REAL main body method"
The FAKE greeting is not printed, "fake" method has to be called after creating object instance, like any other non-static method.
Why can't it be interpretet as THE static main method?
Non-static main method would be ambiguity and JVM won't know how to create object containing it. See this example:
public class Dinosaur {
public Dinosaur() {
System.out.println("Hi, I have just created a dinosaur!");
}
public void main() {
System.out.println("Hello, this is the main body method");
}
}
Should it call parameterless constructor? Or should it just skip it and run the code from main method and don't construct this object? What should running this class print first - creating a Dinosaur or welcoming you in the body of main? Or maybe just execute the main and don't create an object? You have a whole lot of options here.
As you see, due to this type of inconvenience interptering every method named main as THE main would cause pure chaos. Also, thanks to the static main method you can have an entry point, a place where the whole program begins and cannot be shadowed by some lousy parameterless constructors :)