You're right; the Java compiler
could generate the throws clauses for a method. The resulting .class files could be identical to those generated using manually-specified throws clauses.
But the result would essentially be that all exceptions would be "unchecked;" you would never know when you needed to catch an exception. You wouldn't know the failure modes of a method you were calling (unless you looked it up, of course, which would make your life harder.) So your code would fail at runtime in surprising ways; you wouldn't know where to add catch clauses until
testing pointed them out.