Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
java1_2013_2014 / java5.pptx
Скачиваний:
132
Добавлен:
16.04.2015
Размер:
128.09 Кб
Скачать

JAVA-ТЕХНОЛОГИЯ

Сафонов Владимир Олегович

Профессор кафедры информатики, руководитель лаборатории Java- технологии (http://polyhimnie.math.spbu.ru/jtl)

Email: vosafonov@gmail.com

Лекция 5

Блоки и объявления локальных переменных

Блок: {S1; S2; … Sn} , где Si – оператор или объявление локальной переменной

Область действия локального объявления – от объявления до конца блока (а не весь блок) :

{int a = 1; int b = 2; int c; c = a + b; } // корректно

{int x = y + 1; // ошибка: y определяется позже x

int y = 0; int z = z;

// ошибка : использование z в правой части его определения

}

Для совместимости с C / C++ разрешается использовать две формы объявления переменных типа “массив”:

double[][] a ; // рекомендуется

double a [][]; // допустимо для совместимости с C / C++ double[] a []; // и т.д. – допустимо, но не рекомендуется

void m(int x) { int x; /* ошибка: аргументы и локальные – один блок */ }

(C) В.О. Сафонов. 2013

Условный оператор и условное выражение

 

Условный оператор:

if (B) S

или if(B) S else S1

 

Пример (с рекомендуемой расстановкой скобок) :

 

if (i < 0 || i > a.length) {

 

 

y = 0;

 

 

 

} else {

 

 

 

y = a[i];

 

 

 

}

 

 

 

Условное выражение:

B? E1 : E2

 

Пример:

 

 

 

y = (i < 0 || i >= a.length)? 0

: a[i];

(C) В.О. Сафонов. 2013

Оператор switch

switch (token) { // допустимо выражение типа char, byte, short, int

case ID: // допустимо несколько меток: case C1: case C2: AssignmentOrCallStatement();

break; // при отсутствии – “проваливание” в другую альтернативу

case IF:

IfStatement(); break; case BEGIN:

BlockStatement(); break;

default: // альтернатива default настоятельно рекомендуется Error(); // одно из типичных применений default

} // switch

Спецификация Java рекомендует Java-компиляторам выдавать предупреждение, если в switch нет default-альтернативы

(C) В.О. Сафонов. 2013

Операторы while и do-while

Пример 1: метод итераций

while (Math.abs(cur – prev) >= EPS) { // выражение типа boolean double tmp = cur;

cur = F(cur); prev = tmp;

} // while

Пример 2: поиск элемента в списке found: // помеченный оператор do-while

do {

if (elem.getValue() == x) { break found;

} else {

elem = elem.getNext();

}

} while (elem != null); // в скобках – выражение типа boolean

(C)В.О. Сафонов.

2013

Операторы for, break, continue

done:

//Суммирование неотрицательных элементов матрицы a.

//Если встречается NaN или Positive/Negative Infinity, выход из цикла for (int i = 0; i < a.length; i++) {

double s = 0.0;

int m = a[i].length;

for (int j = 0; j < m; j++) { double x = a[i][j];

if (Double.isInfinite(x) || Double.isNaN(x)) break done; if (x < 0.0) continue;

s += x;

}

System.out.println(s);

}

(C) В.О. Сафонов. 2013

Исключения (exceptions)

Исключение – способ прекращения выполнения конструкции или метода в случае ошибки, нарушения ограничений или другого отклонения от нормального хода выполнения программы

Исключения - важный элемент модульного программирования (повышают надежность модуля и входят в его интерфейс)

Возможная альтернатива – коды завершения методов (Pascal, C)

История понятия исключения:

- PL/1 (1965) : оператор ON

ON ENDFILE(SYSIN) GOTO ERROR; - CLU (1974): сигналы (signals)

car = proc(p:list) signals empty; … if p = nil then signal empty;

- C++ (в версии 1989 г.): исключения – объекты (структуры) :

(C) В.О. Сафонов.

2013 struct MyExc { …}; …void p() { … if (B) throw MyExc(); … }; try { … p(); … } catch (MyExc e) { … }

Исключения в Java

Исключение – объект класса, производного от Throwable

Иерархия исключений:

-Exception – исключение, которое может быть обработано

- Error – ошибка, приводящая к прекращению программы, например:

NoSuchFieldError – отсутствие поля в классе;

AbstractMethodError – попытка вызова абстрактного метода.

Иерархия обрабатываемых исключений:

- Потомки RuntimeException – “стандартные”

исключения, например:

ArrayIndexOutOfBoundsException – выход за границу массива

(C) -В.Остальные. Сафонов. исключения определяются пользователем:

2013 public class MyException extends Exception { … }; //

Рекомендации по проектированию исключений

Исключение – ошибочная (экстремальная, не планируемая) ситуация, а не условие завершения

конструкции.

Для (планируемого) условия завершения или

прекращения конструкции следует использовать

циклы while, do-while и операторы break с меткой:

while (p != nil)

{process(p); p = p.next()};

// throw new EndOfList() – плохой стиль проектирования

Found:

for (k = 0; k < n; k++)

{ … if Condition(a[k]) break Found; … }

// throw new ElementFound() – плохой стиль

проектирования

int Pop() throws (EmptyStack) // рекомендуется

(C)В.О. Сафонов{ if (sp. < 0) throw new EmptyStack(); … } // 2013рекомендуется

Определение (классов) исключений

Контролируемые исключения (их рекомендуется использовать) :

-должны быть потомками Exception

-могут содержать дополнительную информацию

-должны указываться в заголовке метода: throws MyException

-должны быть обработаны при вызове метода

public class NoElementException extends Exception {

public String key; // значение ключа отсутствующего элемента public NoElementException(String aKey) { key = aKey; }

}

public class Table { …

public Object getElement (String key) throws NoElementException { … throw new NoElementException(key); … } …

(C)} //В.TableО. Сафонов. 2013

Соседние файлы в папке java1_2013_2014