2013 10 07_java_lecture_05

1,880 views

Published on

  • Be the first to comment

  • Be the first to like this

2013 10 07_java_lecture_05

  1. 1. Управляющие конструкции и исключения в Java Алексей Владыкин 7 октября 2013 Алексей Владыкин Управляющие конструкции 7 октября 2013 1 / 29
  2. 2. 1 Условные операторы 2 Циклы 3 Исключения Алексей Владыкин Управляющие конструкции 7 октября 2013 2 / 29
  3. 3. Условные операторы Алексей Владыкин Управляющие конструкции 7 октября 2013 3 / 29
  4. 4. Условные операторы Оператор if if ( weatherIsGood ) { walkInThePark (); } else { readBooksAtHome (); } Есть вариант без else Условие типа boolean, нельзя написать if (i = 3) { ... } Фигурные скобки не обязательны, если внутри один оператор Алексей Владыкин Управляющие конструкции 7 октября 2013 4 / 29
  5. 5. Условные операторы Оператор ?: if ( weatherIsGood ) { System . out . println ( " Weather is good " ); } else { System . out . println ( " Weather is bad " ); } // same effect , but much shorter System . out . println ( " Weather is " + ( weatherIsGood ? " good " : " bad " )); Алексей Владыкин Управляющие конструкции 7 октября 2013 5 / 29
  6. 6. Условные операторы Оператор switch switch ( digit ) { case 0: text = " zero " ; break ; case 1: text = " one " ; break ; // case 2 - case 9 default : text = " ??? " ; break ; Без break исполнение продолжается Работает для примитивных типов byte, short, char, int, а также для enum В Java 7 добавлен switch для String } Алексей Владыкин Управляющие конструкции 7 октября 2013 6 / 29
  7. 7. Условные операторы if ( digit == 0) { text = " zero " ; } else if ( digit == 1) { text = " one " ; } else if ( digit == 2) { text = " two " ; } /* 3 - 9 */ else { text = " ??? " ; } Алексей Владыкин Управляющие конструкции 7 октября 2013 7 / 29
  8. 8. Циклы Алексей Владыкин Управляющие конструкции 7 октября 2013 8 / 29
  9. 9. Циклы Цикл while while ( haveTime () && haveMoney ()) { goShopping (); } Цикл с предусловием Условие типа boolean Фигурные скобки не обязательны, если внутри один оператор Алексей Владыкин Управляющие конструкции 7 октября 2013 9 / 29
  10. 10. Циклы Цикл do while do { goShopping (); } while ( haveTime () && haveMoney ()); Цикл с постусловием Нужна точка с запятой в конце Фигурные скобки не обязательны, если внутри один оператор Алексей Владыкин Управляющие конструкции 7 октября 2013 10 / 29
  11. 11. Циклы Цикл for for ( int i = 0; i < args . length ; i ++) { System . out . println ( args [ i ]); } Все части заголовка не обязательны for (;;) — бесконечный цикл Фигурные скобки не обязательны, если внутри один оператор Алексей Владыкин Управляющие конструкции 7 октября 2013 11 / 29
  12. 12. Циклы Цикл foreach for ( String arg : args ) { System . out . println ( arg ); } Добавлен в Java 5 Применим к массивам и классам, реализующим интерфейс java.lang.Iterable Алексей Владыкин Управляющие конструкции 7 октября 2013 12 / 29
  13. 13. Циклы Оператор break for ( String s : haystack ) { if ( needle . equals ( s )) { found = true ; break ; } } Передает управление на следующий за циклом оператор Применим ко всем видам циклов Алексей Владыкин Управляющие конструкции 7 октября 2013 13 / 29
  14. 14. Циклы Оператор continue for ( String s : haystack ) { if (! needle . equals ( s )) { continue ; } count ++; } Прерывает текущую итерацию цикла и начинает следующую Перед новой итерацией проверяется условие цикла Применим ко всем видам циклов Алексей Владыкин Управляющие конструкции 7 октября 2013 14 / 29
  15. 15. Циклы Метки Операторы break и continue действуют на ближайший цикл Можно указать другой цикл при помощи метки outer : for ( int [] row : matrix ) { for ( int x : row ) { if ( x > 100) { break outer ; } } } Алексей Владыкин Управляющие конструкции 7 октября 2013 15 / 29
  16. 16. Исключения Алексей Владыкин Управляющие конструкции 7 октября 2013 16 / 29
  17. 17. Исключения Что такое «исключение» Исключение (exception) — событие, возникающее в процессе работы программы и прерывающее её нормальное исполнение Примеры: java.lang.NullPointerException java.lang.ArrayIndexOutOfBoundsException java.lang.ClassCastException java.lang.ArithmeticException java.lang.OutOfMemoryError java.io.IOException Алексей Владыкин Управляющие конструкции 7 октября 2013 17 / 29
  18. 18. Исключения java.lang.Throwable Исключение в Java — полноценный объект Все исключения в Java наследуются от класса Throwable String getMessage() Throwable getCause() StackTraceElement[] getStackTrace() void printStackTrace() Алексей Владыкин Управляющие конструкции 7 октября 2013 18 / 29
  19. 19. Исключения Stack Trace java.lang.NullPointerException at ru.compscicenter.java2013.Test.baz(Test.java:19) at ru.compscicenter.java2013.Test.bar(Test.java:14) at ru.compscicenter.java2013.Test.foo(Test.java:10) at ru.compscicenter.java2013.Test.main(Test.java:6) Алексей Владыкин Управляющие конструкции 7 октября 2013 19 / 29
  20. 20. Исключения Классификация исключений Исключительные ситуации в JVM java.lang.Error Исключительные ситуации в пользовательском коде Проверяемые (checked) java.lang.Exception Непроверяемые (unchecked) java.lang.RuntimeException Алексей Владыкин Управляющие конструкции 7 октября 2013 20 / 29
  21. 21. Исключения Пользовательские исключения public class InvalidUserException extends Exception { public InvalidUserException () { super ( " Please replace user and continue " ); } } Алексей Владыкин Управляющие конструкции 7 октября 2013 21 / 29
  22. 22. Исключения Выброс исключения // from java . lang . Integer public static int parseInt ( String s , int radix ) throws NumberFormatException { if ( s == null ) { throw new NumberFormatException ( " null " ); } // code skipped } Оператор throw прерывает нормальное исполнение программы и запускает поиск обработчика исключения Если исключение проверяемое, метод должен содержать его в списке throws Алексей Владыкин Управляющие конструкции 7 октября 2013 22 / 29
  23. 23. Исключения Перехват исключения: try-catch System . out . print ( " Please enter number : " ); int n = 0; while ( true ) { String s = readUserInput (); try { n = Integer . parseInt ( s ); break ; } catch ( NumberFormatException e ) { System . out . print ( " Bad number , try again : " ); } } Алексей Владыкин Управляющие конструкции 7 октября 2013 23 / 29
  24. 24. Исключения Перехват нескольких исключений try { // ... } catch ( IOException e ) { e . printStackTrace (); } catch ( NumberFormatException e ) { e . printStackTrace (); } // this works since Java 7: try { // ... } catch ( IOException | NumberFormatException e ) { e . printStackTrace (); } Алексей Владыкин Управляющие конструкции 7 октября 2013 24 / 29
  25. 25. Исключения Обработка исключения Если в коде вызываются методы, бросающие проверяемые исключения, эти исключения надо либо поймать и обработать (catch), либо добавить в список throws Стратегии обработки: Игнорирование (пустой catch) Запись в лог Проброс дальше того же или нового исключения Содержательная обработка (например, повтор операции) Алексей Владыкин Управляющие конструкции 7 октября 2013 25 / 29
  26. 26. Исключения Исключения и освобождение ресурсов InputStream is = new FileInputStream ( " a . txt " ); try { readFromInputStream ( is ); } finally { is . close (); } Блок finally будет выполнен в любом случае В нем обычно освобождают использованные ресурсы Алексей Владыкин Управляющие конструкции 7 октября 2013 26 / 29
  27. 27. Исключения try с ресурсами try ( InputStream is = new FileInputStream ( " a . txt " )) { readFromInputSteam ( is ); } Добавлен в Java 7 Метод close() будет вызван автоматически, как в finally Можно перечислить сразу несколько ресурсов Ресурсы должны реализовать интерфейс java.lang.AutoCloseable Алексей Владыкин Управляющие конструкции 7 октября 2013 27 / 29
  28. 28. Исключения Гарантии безопасности Гарантии отсутствия исключений Сильные гарантии Слабые гарантии Гарантия отсутствия утечек Никаких гарантий Алексей Владыкин Управляющие конструкции 7 октября 2013 28 / 29
  29. 29. Что сегодня узнали Как в Java написать ветвление и цикл, какие есть разновидности Что такое «исключение», какие бывают типы исключений Как пользоваться исключениями Алексей Владыкин Управляющие конструкции 7 октября 2013 29 / 29

×