2012-04-09 3 views
0

Я написал код, который был взят из Java. Как программировать 9-е издание. Пол и Мишель Харви. Код работает нормально, но проблема в том, что каждый раз, когда я его выполняю, это дает мне неопределенные результаты в которые обрабатываются исключениями - например, просмотрите вывод фрагмента кода. не могли бы вы помочь мне понять, почему такое поведение происходит?Исключение Обработка выходных сообщений

public class Test { 

    public static void main(String[] args) { 

     try { 
      // call method throwException 
      throwException(); 
     }// end try 

     catch (Exception e) { 
      System.out.println("Exception handled in main"); 
     }// end catch 

     // call method doesNotThrowException 
     doesNotThrowException(); 

    } 

    private static void throwException() throws Exception { 
     try { 
      System.out.println("Method throwException."); 
      throw new Exception(); // generate exception 
     } 

     catch (Exception exception) { 
      System.err.println("Exception handled in method throwException"); 
      throw exception; 
     } 

     // executes regardless of what occurs in try ... catch block 
     finally { 
      System.err.println("Finally executed in throwException."); 
     } 
    }// end of method throwException 

    private static void doesNotThrowException() { 
     try { 
      System.out.println("Method doesNotThrowException."); 
     } 

     // catch does not execute as the method does not throw any exceptions 
     catch (Exception exception) { 
      System.err.println(exception); 
     }// end catch 

     // executes regardless of what occurs in try ... catch block 
     finally { 
      System.err.println("Finally executed in doesNotThrowException"); 
     } 
    }// end of deosNotThrowException 

}//end Test Class 

ВЫХОДЫ: 1)

Method throwException. 
Exception handled in method throwException 
Finally executed in throwException. 
Finally executed in doesNotThrowException 
Exception handled in main 
Method doesNotThrowException. 

2)

Exception handled in method throwException 
Finally executed in throwException.Method throwException. 

Finally executed in doesNotThrowException 
Exception handled in main 
Method doesNotThrowException. 
+0

Ваш вопрос непонятен. Выходы 1 и 2? Почему так? Вы получаете разные результаты на двух разных трассах? – m0skit0

+0

Да, вы правы - у меня разные результаты на двух разных сериях! на самом деле это мой вопрос - и я не знаю, почему это поведение произошло. – Sinan

ответ

4

Различные выходы различных трасс являются из-за вы используете 2 различных выходных потоков: из и ошибка. Это зависит от ОС, чтобы очистить такие потоки ввода-вывода, и это происходит по-разному при каждом запуске в зависимости от других факторов, которые не имеют ничего общего с вашей программой. Единственное, что гарантирует ОС, заключается в том, что порядок для и порядок для err сохранены, но не порядок между ними.

+0

Благодарим вас за ответ - это высоко ценится. – Sinan

Смежные вопросы