adrian
adrian

Reputation: 4594

question about try-catch

I have a problem understanding how the try{} catch(Exception e){...} works!

Let's say I have the following:

try
{
    while(true)
    {
        coord = (Coordinate)is.readObject();//reading data from an input stream
    }
}
catch(Exception e)
{
    try{
        is.close();
        socket.close();
    }
    catch(Exception e1)
    {
        e1.printStackTrace();
    }
}

Section 2

    try
    {
        is.close();
        db.close();
    }
    catch(Exception e)
    {
        e.printStackTrace();
    }

Let's say my while() loop throws an error because of an exception of is stream.

This will get me out of the infinite loop and throw me in the first catch(){............} block.

My question is the following:

After throwing an exception, getting out of the loop while() and reaching to

catch(){ 
}

Will my program continue his execution and move on to section 2? As long as the exception was caught? Or everything ends in the first catch()?

Upvotes: 0

Views: 276

Answers (4)

Saurabh Gokhale
Saurabh Gokhale

Reputation: 46395

Yes, you are right. It will move to Section 2.

If you want your Section 2 bound to happen, irrespective of any exception generated, you might want to enclose them in a finally block.

try {
    // Do foo with is and db
} 
catch (Exception e) {
    // Do bar for exception handling
}  

// Bound to execute irrespective of exception generated or not ....
finally {
      try {
          is.close();
          db.close();
        }
     catch (Exception e2) {
      // Exception description ....
    }
}

Upvotes: 1

Pedantic
Pedantic

Reputation: 5022

I think you want to use finally after your first catch [catch (Exception e)] to close your streams:

try {
    // Do foo with is and db
} catch (Exception e) {
    // Do bar for exception handling
} finally {
    try {
        is.close();
        db.close();
    } catch (Exception e2) {
      // gah!
    }
}

Upvotes: 3

therealmitchconnors
therealmitchconnors

Reputation: 2760

As long as no exceptions are thrown in your catch clause, your program will continue execution after your catch (or finally) clause. If you need to rethrow the exception from the catch clause, use throw; or throw new Exception(ex). Do not use throw ex, as this will alter the stack trace property of your exception.

Upvotes: 3

Andy Thomas
Andy Thomas

Reputation: 86381

After the exception is caught, execution continues after the try/catch block. In this case, that's your section 2.

An uncaught exception will terminate the thread, which might terminate the process.

Upvotes: 2

Related Questions