Static methods are methods which are created and owned by a class itself, rather than an instance of a class.
Dynamic binding occurs with an instance of a class- it dynamically decides what type it is, then jumps on the virtual method table to the correct method definition.
Since static methods would be resolved at compile time, it does not use the virtual method lookup.
Now your question seems to be asking: why are static methods resolved at compile time?
Everything that can be resolved at compile time is done so- final variables are essentially inlined. But still, it seems to be a choice of the
java language to resolve static methods at compile time, it does not seem ultimately required to have a functioning language.
One could imagine static methods being resolved at run time, when it made sense to do so (when you had a reference to a base class which was dynamically tied to one of the children classes) However, obviously this would not work if you were invoking the method without an instance of the class. If you do have an instance of the class, it seems like it would be possible, but would be a different language (Java++).
So I think the answer is: it was an arbitrary decision by the design comitteeto speed up the virtual machine (fewer dynamic bindings = faster) I agree with their decision, but could see the decision going the other way if history were to be split.