Any use, i.e. read, of the second case would give you an error. But unused variables count as a warning, not an error; the meaning of the code that runs is unambiguous, if quite likely wrong.
For the constructor case, there isn't that kind of unused variable analysis performed by the compiler, if only because (for anything except private fields) it might be read in another file the compiler doesn't have access to.
So it needs to be trapped as an error to avoid run-time behaviour that would end up depending on unspecified JVM implementaion details.