Сомневаюсь в обработке исключений и, наконец, блокировать в Java - PullRequest
2 голосов
/ 11 февраля 2009

Можете ли вы рассказать, как это сделать?

Код:

public void main(String[] args) {
    try {
        //Some Exception throws here
    }
    catch(SomeException se) {
        se.printStackTrace();
    } 
    finally {
        try {
            //SomeException1 throws here
        }
        catch(SomeException1 se1) {
            se.printStackTrace();
            //Control is getting stop in this block itself but i wanna print the below statement
        }

        // I need to print this statement whatever exception occurs
        System.out.println("End Program"); 
    }
}

Ответы [ 5 ]

7 голосов
/ 11 февраля 2009

Просто добавьте еще один блок finally

public void main(String[] args) {
  try {

    //Some Exception throws here

  }
  catch(SomeException se) {
    se.printStackTrace();
  }
  finally {
    try {

      //SomeException1 throws here

    }
    catch(SomeException1 se1) {
      se.printStackTrace();
    }
    finally {
      System.out.println("End Program"); ----> I need to print this statement whatever exception occurs
    }
  }
}

Или, если вы знаете, что будут обрабатываться только исключения, вы можете просто отбросить блоки finally.

2 голосов
/ 11 февраля 2009

Добавление еще одного блока finally должно работать:

try {
    //Some Exception throws here
} catch(SomeException se) {
    se.printStackTrace();
} finally {
    try {
        //SomeException1 throws here
    } catch(SomeException1 se1) {
        se.printStackTrace();
    } finally {
       System.out.println("End Program"); 
    }
}
2 голосов
/ 11 февраля 2009

Похоже, это должно работать.

Пара идей:

  • Вы можете поместить System.out.println (...) в другой блок finally.

  • Единственный способ, которым программа должна остановить в этом блоке перехвата, это если что-то вызывает System.exit (). Если вы вызываете exit, вот и все ... код больше не запускается.

  • Трассировки стека записываются со стандартной ошибкой, но строка, которую вы хотите, записывается в стандартную ошибку. Возможно, вы перенаправляете их в разные места?

1 голос
/ 11 февраля 2009

Как насчет печати за пределами первого блока try в ваших вложенных блоках try непосредственно перед завершением основного?

  public void main(String[] args) {
    try {
      //Some Exception throws here
    } catch(SomeException se) {
      se.printStackTrace();
    } finally {
      try {
        //SomeException1 throws here
      } catch(SomeException1 se1) {
        se.printStackTrace();
        //Control is getting stop in this block itself but i wanna print the below statement
      }
    }

    System.out.println("End Program"); // --- How about here? (Srikanth)  ----
  }

Вы ловите исключение, поэтому ваша программа все равно не закончится внезапно. Но я думаю, что это будет напечатано, не уверен, что именно вы делаете в блоке nested-catch. Выдает ли какое-то RuntimeException?

0 голосов
/ 11 февраля 2009

Как-то иначе:

public void main(String[] args) {
        boolean exceptionOccured = false;
        try {
            exceptionOccured = true;
            //Some Exception throws here
            exceptionOccured = false;
        }
        catch(SomeException se) {
            se.printStackTrace();
        } 
        finally {
            Exception e = null;
            try {
                //SomeException1 throws here
            }
            catch(SomeException1 se1) {                
                exceptionOccured = true;
                se.printStackTrace();
                //Control is getting stop in this block itself but i wanna print the below statement
            }

            // I need to print this statement whatever exception occurs
            if(exceptionOccured)
              System.out.println("End Program"); 
        }
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...