Java - is it bad practice to do a try/catch inside a try/catch?

50,710

Solution 1

It's fine, although if your exception handling logic is that complex, you might consider breaking it out into its own function.

Solution 2

It is a bad practice to write code with so many levels of nesting, especially in try-catch - so I would say: avoid. On the other hand throwing an exception from catch block is unforgivable sin, so you should be very careful.

My advice - extract your catch logic into a method (so catch block is simple) and make sure this method will never throw anything:

Uri uri = Uri.parse("some url");
Intent intent = new Intent(Intent.ACTION_VIEW, uri);

try 
{
    startActivity(intent);
} 
catch (ActivityNotFoundException anfe) 
{
    // Make some alert to me

    // Now try to redirect them to the web version:
    Uri weburi = Uri.parse("some url");
    Intent webintent = new Intent(Intent.ACTION_VIEW, weburi);
    silentStartActivity(webintent)
} 

//...

private void silentStartActivity(Intent intent) {
    try
    {
       startActivity(webintent);
    }
    catch ( Exception e )
    {
        // Make some alert to me                     
    }
}

Also it seems (I might be wrong) that you are using exceptions to control program flow. Consider standard return value if throwing ActivityNotFoundException is not an exceptional situation but it might happen under normal circumstances.

Solution 3

Answer is No..It is 100% fine.. You might have to use lot of these in JDBC and IO, because they have lot of exceptions to be handled, one inside another...

Share:
50,710
GeekedOut
Author by

GeekedOut

Recently started working on http://www.problemio.com Thank you to all the people on StackOverflow who have helped me. Could not have made the progress I did without your help!! EDIT: I LOOOOOOOOOOVE STACKOVERFLOW. THANK YOU TO ALL THE AMAZING PEOPLE HERE!!!!

Updated on January 11, 2020

Comments

  • GeekedOut
    GeekedOut over 4 years

    I have some code that I want to execute if an exception happens. But that code can also generate an exception. But I have never seen people do a try/catch inside another try/catch.

    Is what I am doing poor practice and maybe there is a better way of doing this:

     Uri uri = Uri.parse("some url");
     Intent intent = new Intent(Intent.ACTION_VIEW, uri);
    
     try 
     {
         startActivity(intent);
     } 
     catch (ActivityNotFoundException anfe) 
     {
         // Make some alert to me
    
         // Now try to redirect them to the web version:
         Uri weburi = Uri.parse("some url");
         try
         {
             Intent webintent = new Intent(Intent.ACTION_VIEW, weburi);
             startActivity(webintent);
         }
         catch ( Exception e )
         {
             // Make some alert to me                        
         }
     }
    

    It seems kind of awkward. Is there something that might be wrong with it?