2012 10 10_java_lecture05

2,552 views

Published on

0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total views
2,552
On SlideShare
0
From Embeds
0
Number of Embeds
2,074
Actions
Shares
0
Downloads
18
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

2012 10 10_java_lecture05

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

×