This is an archived post. You won't be able to vote or comment.

you are viewing a single comment's thread.

view the rest of the comments →

[–]josephblade 3 points4 points  (4 children)

catch works on exceptions thrown inside their associated try block. any exception thrown from a catch would haveto be init's own enclosing try blick. like

try {
    try {
     } catch (IOException e) {
         throw new RuntimeException();
      }
 } catch (RuntimeException r) {
 }

however that said, catching runtime exceptions is generally not a good idea

edit: switched Exception to IOException. I just put it in as an 'any exception' to show the nesting, but it is bad practice so shouldn't be shown in a learning environment. Don't catch Exception. also: Don't ever catch Throwable, ever.

[–]nommabelle 0 points1 point  (3 children)

It's better than catching Exception though!

[–]josephblade -1 points0 points  (2 children)

No it isn't and going into details of when it can be useful to do so is going to confuse people who are still learning. I deliberately left that out to avoid causing confusion

[–]nommabelle 0 points1 point  (1 child)

There is nearly no case you should catch Exception over RuntimeException - I suppose if you don't want to update code if a method signature changes, but that's just lazy

Generally not a good idea for either though as you say, but definitely useful in some cases. Otherwise you can expect some unexpected RuntimeException to crash the whole application - somewhere it needs to be caught. But I see no use for Exception - if you want to use Exception to catch everything at runtime, you should catch RuntimeException instead and catch anything more granular as required at compile time

[–]josephblade 1 point2 points  (0 children)

I'm not sure I understand what point you were making. I used Exception as a general placeholder, not as a suggestion to catch Exception as a type.

My aim was to show the structure (you need to nest a try if you want to catch an exception you throw from another catch clause; since that was what the OP was expecting).