posted 9 years ago
Short answer: because that's how the language was specified.
Anything beyond that is speculation. One guess would be that it's easier to get the compiler to check local variables for initialisation: it's easy to follow the sequence of commands in a method and see that a variable might get used before it is initialised. Whereas an instance variable is much harder. If you had a public getter and a setter, for instance, you might have to analyse the entire application to be able to work out whether the getter could be called before the setter was.