2013 10 07_java_lecture_05
Upcoming SlideShare
Loading in...5
×
 

2013 10 07_java_lecture_05

on

  • 1,827 views

 

Statistics

Views

Total Views
1,827
Views on SlideShare
333
Embed Views
1,494

Actions

Likes
0
Downloads
10
Comments
0

3 Embeds 1,494

http://beta.compscicenter.ru 1467
http://compscicenter.ru 25
http://gamma.compscicenter.ru 2

Accessibility

Categories

Upload Details

Uploaded via as Adobe PDF

Usage Rights

© All Rights Reserved

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment

2013 10 07_java_lecture_05 2013 10 07_java_lecture_05 Presentation Transcript

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