The shortest possible answer as to why they are static and final is "Because.
" They are, because that's how Java was designed.
Now, what's the rationale? The best rationale is simply that the creators of Java did not think of instance variables as part of the contract of any class. The only kind of public instance variables that
you should ever use are the "dumb data" kind, as in java.awt.Point. Otherwise, the only sort of variables belonging to another class you should ever be interested in are public final static ones.