When you allocate resources for a local variable, Java doesn't write a value into the memory. The reason you get an error is because Java makes sure you give it a value before you use it. Sun realized that this can be a difficult problem to diagnose in C code, because you don't get help from the compiler, so they decided to check it at compile time.
From my point of view, the reason is because that's the way the creators of Java said we have to do it. It's very likely that their reasons for this decision are along the lines of what Timmy said above.