Your SlideShare is downloading. ×
0
2012 10 10_java_lecture05
2012 10 10_java_lecture05
2012 10 10_java_lecture05
2012 10 10_java_lecture05
2012 10 10_java_lecture05
2012 10 10_java_lecture05
2012 10 10_java_lecture05
2012 10 10_java_lecture05
2012 10 10_java_lecture05
2012 10 10_java_lecture05
2012 10 10_java_lecture05
2012 10 10_java_lecture05
2012 10 10_java_lecture05
2012 10 10_java_lecture05
2012 10 10_java_lecture05
2012 10 10_java_lecture05
2012 10 10_java_lecture05
2012 10 10_java_lecture05
2012 10 10_java_lecture05
2012 10 10_java_lecture05
2012 10 10_java_lecture05
2012 10 10_java_lecture05
2012 10 10_java_lecture05
2012 10 10_java_lecture05
2012 10 10_java_lecture05
2012 10 10_java_lecture05
2012 10 10_java_lecture05
2012 10 10_java_lecture05
2012 10 10_java_lecture05
Upcoming SlideShare
Loading in...5
×

Thanks for flagging this SlideShare!

Oops! An error has occurred.

×
Saving this for later? Get the SlideShare app to save on your phone or tablet. Read anywhere, anytime – even offline.
Text the download link to your phone
Standard text messaging rates apply

2012 10 10_java_lecture05

1,980

Published on

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

  • Be the first to like this

No Downloads
Views
Total Views
1,980
On Slideshare
0
From Embeds
0
Number of Embeds
9
Actions
Shares
0
Downloads
14
Comments
0
Likes
0
Embeds 0
No embeds

Report content
Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
No notes for slide

Transcript

  • 1. Управляющие конструкции и исключения в Java Алексей Владыкин 10 октября 2012Алексей Владыкин Управляющие конструкции 10 октября 2012 1 / 29
  • 2. 1 Условные операторы2 Циклы3 Исключения Алексей Владыкин Управляющие конструкции 10 октября 2012 2 / 29
  • 3. Условные операторы1 Условные операторы2 Циклы3 Исключения Алексей Владыкин Управляющие конструкции 10 октября 2012 3 / 29
  • 4. Условные операторыОператор ifif ( weatherIsGood ) { walkInThePark ();} else { readBooksAtHome ();} Есть вариант без else Условие типа boolean, нельзя написать if (i = 3) { ... } Фигурные скобки не обязательны, если внутри один оператор Алексей Владыкин Управляющие конструкции 10 октября 2012 4 / 29
  • 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. Условные операторыОператор 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. Условные операторы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. Циклы1 Условные операторы2 Циклы3 Исключения Алексей Владыкин Управляющие конструкции 10 октября 2012 8 / 29
  • 9. ЦиклыЦикл whilewhile ( haveTime () && haveMoney ()) { goShopping ();} Цикл с предусловием Условие типа boolean Фигурные скобки не обязательны, если внутри один оператор Алексей Владыкин Управляющие конструкции 10 октября 2012 9 / 29
  • 10. ЦиклыЦикл do whiledo { goShopping ();} while ( haveTime () && haveMoney ()); Цикл с постусловием Нужна точка с запятой в конце Фигурные скобки не обязательны, если внутри один оператор Алексей Владыкин Управляющие конструкции 10 октября 2012 10 / 29
  • 11. ЦиклыЦикл forfor ( int i = 0; i < args . length ; i ++) { System . out . println ( args [ i ]);} Все части заголовка не обязательны for (;;) — бесконечный цикл Фигурные скобки не обязательны, если внутри один оператор Алексей Владыкин Управляющие конструкции 10 октября 2012 11 / 29
  • 12. ЦиклыЦикл foreachfor ( String arg : args ) { System . out . println ( arg );} Добавлен в Java 5 Применим к массивам и классам, реализующим интерфейс java.lang.Iterable Алексей Владыкин Управляющие конструкции 10 октября 2012 12 / 29
  • 13. ЦиклыОператор breakfor ( String s : haystack ) { if ( needle . equals ( s )) { found = true ; break ; }} Передает управление на следующий за циклом оператор Применим ко всем видам циклов Алексей Владыкин Управляющие конструкции 10 октября 2012 13 / 29
  • 14. ЦиклыОператор continuefor ( String s : haystack ) { if (! needle . equals ( s )) { continue ; } count ++;} Прерывает текущую итерацию цикла и начинает следующую Перед новой итерацией проверяется условие цикла Применим ко всем видам циклов Алексей Владыкин Управляющие конструкции 10 октября 2012 14 / 29
  • 15. ЦиклыМетки Операторы break и continue действуют на ближайший цикл Можно указать другой цикл при помощи меткиouter :for ( int [] row : matrix ) { for ( int x : row ) { if ( x > 100) { break outer ; } }} Алексей Владыкин Управляющие конструкции 10 октября 2012 15 / 29
  • 16. Исключения1 Условные операторы2 Циклы3 Исключения Алексей Владыкин Управляющие конструкции 10 октября 2012 16 / 29
  • 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. Исключенияjava.lang.Throwable Исключение в Java — полноценный объект Все исключения в Java наследуются от класса Throwable String getMessage() Throwable getCause() StackTraceElement[] getStackTrace() void printStackTrace() Алексей Владыкин Управляющие конструкции 10 октября 2012 18 / 29
  • 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. ИсключенияКлассификация исключений Исключительные ситуации в JVM java.lang.Error Исключительные ситуации в пользовательском коде Проверяемые (checked) java.lang.Exception Непроверяемые (unchecked) java.lang.RuntimeException Алексей Владыкин Управляющие конструкции 10 октября 2012 20 / 29
  • 21. ИсключенияПользовательские исключенияpublic class InvalidMoveException extends Exception { public InvalidMoveException ( String message ) { super ( message ); }} Алексей Владыкин Управляющие конструкции 10 октября 2012 21 / 29
  • 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. ИсключенияПерехват исключения: 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. ИсключенияПерехват нескольких исключений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. ИсключенияОбработка исключения Если в коде вызываются методы, бросающие проверяемые исключения, эти исключения надо либо поймать и обработать (catch), либо добавить в список throws Стратегии обработки: Игнорирование (пустой catch) Запись в лог Проброс дальше того же или нового исключения Содержательная обработка (например, повтор операции) Алексей Владыкин Управляющие конструкции 10 октября 2012 25 / 29
  • 26. ИсключенияИсключения и освобождение ресурсовInputStream is = new FileInputStream ( " a . txt " );try { readFromInputStream ( is );} finally { is . close ();} Блок finally будет выполнен в любом случае В нем обычно освобождают использованные ресурсы Алексей Владыкин Управляющие конструкции 10 октября 2012 26 / 29
  • 27. Исключенияtry с ресурсамиtry ( InputStream is = new FileInputStream ( " a . txt " )) { readFromInputSteam ( is );} Добавлен в Java 7 Метод close() будет вызван автоматически, как в finally Можно перечислить сразу несколько ресурсов Ресурсы должны реализовать интерфейс java.lang.AutoCloseable Алексей Владыкин Управляющие конструкции 10 октября 2012 27 / 29
  • 28. ИсключенияГарантии безопасности Гарантии отсутствия исключений Сильные гарантии Слабые гарантии Гарантия отсутствия утечек Никаких гарантий Алексей Владыкин Управляющие конструкции 10 октября 2012 28 / 29
  • 29. Что сегодня узнали Как в Java написать ветвление и цикл, какие есть разновидности Что такое «исключение», какие бывают типы исключений Как пользоваться исключениями Алексей Владыкин Управляющие конструкции 10 октября 2012 29 / 29

×