вопрос о пробной ловле - PullRequest
0 голосов
/ 07 июня 2011

У меня проблемы с пониманием того, как работает try{} catch(Exception e){...}!

Допустим, у меня есть следующее:

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();
    }
}

Раздел 2

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

Допустим, мой цикл while() выдает ошибку из-за исключения is stream.

Это выведет меня из бесконечного цикла и бросит меня в первый блок catch(){............}.

У меня следующий вопрос:

После выброса исключения из цикла while() и достижения

catch(){ 
}

Будет ли моя программа продолжать выполнение иперейти к разделу 2?Пока исключение было поймано?Или все заканчивается в первом catch()?

Ответы [ 4 ]

3 голосов
/ 07 июня 2011

Пока в вашем предложении catch не генерируются исключения, ваша программа продолжит выполнение после вашего предложения catch (или finally).Если вам нужно отбросить исключение из предложения catch, используйте throw;или бросить новое исключение (бывшее).Не используйте throw ex, так как это изменит свойство трассировки стека вашего исключения.

3 голосов
/ 07 июня 2011

Я думаю, что вы хотите использовать finally после первого перехвата [catch (Exception e)], чтобы закрыть ваши потоки:

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!
    }
}
2 голосов
/ 07 июня 2011

После того, как исключение поймано, выполнение продолжается после блока try / catch.В данном случае это ваш раздел 2.

Неперехваченное исключение прервет поток, что может завершить процесс.

1 голос
/ 07 июня 2011

Да, вы правы. Он переместится на Раздел 2 .

Если вы хотите, чтобы ваш Раздел 2 был связан, независимо от сгенерированного исключения, вы можете заключить их в блок finally.

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 ....
    }
}
...