I’m just learning java, but it seems that in the end most of the methods in the beginning of the call stack will just have declarations ‘throws Exception’. What’s the good thing about this statement that I’m missing that makes it useful?
One more example. After writing some code, I decided to refactor one of my classes a bit, using classes from other java libraries; as a result, not only half of the methods of this class gained another 5 exceptions in their declarations, but about half of all my other code, too – until I decided I’d better just write ‘throws exception’ and don’t care about. May be I just use exceptions wrong?
Important edit
My question wasn’t about what that statement does – it is pretty obvious from documentation. I was actually wondering why language designers decided to make this statement necessary.
Java’s approach to exceptions is to make method caller aware of failure conditions and thus be forced to handle them or acknowledge the fact that the exception isn’t handled via a repeated throws statement on the caller’s method. Or put another way, knowing what exceptions are thrown is part of method’s signature and thus the explicit throws statement.
For failures conditions that are not expected to occur in normal course of operation, there are two special kinds of exceptions: RuntimeException and Error. Subclasses of these exception do not need to be explicitly declared in a throws clause or caught by the caller.
It would also be worth noting that using “throws Exception” is sloppy programming in production code as it doesn’t tell the caller of the method anything about the actual failure cases. The only time I would consider using generic “throws Exception” declaration as opposed to enumerating actual exception types is for cases like unit tests where explicit declaration of failure cases serves no purpose.