3 Исключения и коллекции.ppt
- Количество слайдов: 45
Язык программирования JAVA Обработка исключений Массивы и коллекции
Исключения n Ошибочная ситуация, возникающая во время выполнения программы, нарушающая нормальный поток выполнения
Обработка исключений n n При возникновении исключительной ситуации метод создает объект, представляющий ошибку Метод может перехватить этот объект и обработать исключительную ситуацию
Иерархия исключений в Java n Throwable ¡ ¡ Error – ошибка выполнения JVM (Unchecked) Exception – ошибка выполнения кода n IOException (Checked) ¡ n … Runtime. Exception (Unchecked) ¡ …
Что делать с исключениями? n n n Перехватить и обработать ситуацию Не перехватывать и передать в вызывающий метод Перехватить, обработать и создать другое исключение
Синтаксис try{ //Вызов метода, который может создать исключение } catch (Exception. Class 1 ex){ //Обработка исключений определенного класса } catch (Exception. Class 2 ex){ //Обработка исключений другого класса } finally{ //Финальная обработка, выполняется в любом случае }
Пример String s = JOption. Pane. show. Input. Dialog(“Enter string”); int i; try{ i = Integer. parse. Int(s) } catch (Number. Format. Exception ex){ ex. print. Stack. Trace(); JOption. Pane. show. Message. Dialog(null, ”Exception: ”+ex. get. Message()) }
Пример File. Input. Stream f = null; try{ f = new File. Input. Stream(file. Path); while (f. read() != -1){ byte. Count++; } } catch (IOException ex){ JOption. Pane. show. Message. Dialog(null, ”Error: ”+ex. get. Message()) } finally{ f. close; }
Иерархия исключений n Все исключения наследуются от класса Exception n Можно создавать свои иерархии исключений При перехвате исключениясуперкласса перехватываются все исключения-подклассы n
Пример try{ //Какие-то действия } catch (Exception ex){ //Будут перехвачены все возможные исключения } Плохой пример try{ //Какие-то действия } catch (Exception ex){}
Иерархия исключений n При перехвате нескольких исключений необходимо их перехватывать от потомка к родителям try{ //Какие-то действия } catch (Number. Format. Exception ex){ // } catch (IOException ex){ // } catch (Exception ex){ // }
Передача исключений в вызывающие методы n n При объявлении метода необходимо использовать ключевое слово throws Вызывающий метод будет обязан перехватить такую ситуацию public int my. Method() throws My. Exception{ //код, который может вызвать исключение }
Пример public int read. Int() throws Number. Format. Exception{ String s = JOption. Pane. show. Input. Dialog(“Enter number”); int i = Integer. parse. Int(s); return i; }
Как вызвать исключение n Для вызова исключения используется оператор throw public int hire. Emp(Person p) throws Person. Too. Young. Exception{ if (p. get. Age() < 18) { Person. Too. Young. Exception pe = new Person. Too. Young. Exception(); throw pe; } public int hire. Emp(Person p) throws Person. Too. Young. Exception{ if (p. get. Age() < 18) { throw new Person. Too. Young. Exception(); }
Создание собственных исключений n Пользовательские исключения обычно наследуются от класса Exception public class Person. Exception extends Exception {. . . } public class Person. Age. Exception extends Person. Exception {. . . }
Подмена исключений public int set. Age() throws Person. Exception{ String s = JOption. Pane. show. Input. Dialog(“Enter age”); try{ int i = Integer. parse. Int(s); return i; } catch (Number. Format. Exception ex){ throw new Person. Age. Exception (“Age is invalid”); } }
Использование исключительных ситуаций n n Заменяйте исключительные ситуации проверкой, если это возможно Не «гасите» исключительные ситуации Передавайте исключения в вызывающий метод Перехватывайте как можно более «мелкие» исключения
Язык программирования JAVA Массивы и коллекции
Массив n Структура данных, в которой хранятся объекты одинакового типа
Создание массива. . . int[] arr; arr = new int[100]; //Создание массива из 100 элементов int[] primitives = {1, 2, 4, 6}; //создание и заполнение массива Person[] persons = new Person[20]; //создание массива объектов //Заполнение массива for (int i = 0; i < persons. length; i++){ persons[i] = new Person(); } //Доступ к элементам массива System. out. println(persons[4]. get. Age());
Многомерные массивы. . . int[][] arr; arr = new int[100][200]; //Создание массива из 100 х200 элементов arr[5][10] = 111; //Создание треугольного массива int[][] mdarr = new int[10][]; for (int i = 0; i < mdarr. length; i++){ mdarr[i] = new int[i+1]; }
Копирование массивов n n Массивы – это объекты, следовательно, простое присваивание объектных переменных приведет к тому, что обе переменных будут ссылаться на один и тот же массив Для копирования массивов существует метод System. arraycopy(from, from. Index, to. Index, count)
Comparable n Интерфейс с одним методом: int compare. To(Object o) ¡ ¡ Сравнивает экземпляр объекта, на котором вызывается с экземпляром, переданным в качестве параметра Метод compare. To() должен возвращать 0, если объекты равны, число < 0, если данный объект «меньше» переданного, число > 0, если больше
Comparable public class Person implements Comparable{ private int age; . . . public int compare. To(Object o){ Person p = (Person)o; if (p. age == age) return 0; if (p. age > age) return -1; if (p. age < age) return 1; } }
compare. To() и equals() n n Метод equals сравнивает объекты на равенство, результат – логическое выражение Метод compare. To() возвращает значение целого типа
Сортировка, поиск и не только… n n Для сортировки массива используется метод Arrays. sort (используется интерфейс Comparable) Двоичный поиск в массиве: Arrays. binary. Search Заполнение одинаковыми элементами: Arrays. fill Сравнение массивов: Arrays. equals
Динамические структуры данных (Коллекции) n n С Java поставляется большой набор классов для работы с коллекциями объектов (Java Collections Framework) Преимущества ¡ ¡ ¡ Уменьшение затрат на программирование стандартных алгоритмов Увеличение производительности Единый API для всех манипуляций
Коллекции n Java Collections Framework ¡ ¡ ¡ Интерфейсы Реализации Алгоритмы
Коллекции Collection Set List Map Queue Sorted. Map Sorted. Set Все коллекции поддерживают типизацию, т. е. доступно объявление List<Student> student. List; Map<String, Student> student. Name. Map;
Работа с коллекциями n for-each for (Object o : collection) System. out. println(o); n Iterators public interface Iterator<E> { boolean has. Next(); E next(); void remove(); //optional } for (Iterator<? > it = c. iterator(); it. has. Next(); ) System. out. println(it. next())
Работа с коллекциями n n n n add remove size contains. All add. All remove. All retain. All clear n Перевод в массив Object[] a = c. to. Array(); String[] a = c. to. Array(new String[0]);
Интерфейс Set n n n Hash. Set – хранит элементы в хэштаблице Tree. Set – хранит элементы в “Red. Black Tree”, с одновременной сортировкой Linked. Hash. Set – хэш таблица, реализованная при помощи двусвязного списка
Интерфейс List n Доступ к элементам по индексу ¡ ¡ ¡ n n add(int index) remove(int index) index. Of() last. Index. Of() sub. List() size() Может содержать дубликаты элементов Можно использовать цикл for для перебора всех элементов списка
Интерфейс List n n n Array. List – реализация с использованием массива Linked. List – реализация с использованием двунаправленного списка Vector – устаревшая реализация, использовать не рекомендуется
Интерфейс Queue n Реализует FIFO алгоритм ¡ n n Возможно добавление приоритетов Linked. List Priority. Queue Вставка Удаление Проверка наличия Генерируют Исключение add(e) remove() element() Возвращают специальное значение offer(e) poll() peek()
Интерфейс Map n n n Предназначен для хранения пар ключ-значение Одинаковых ключей быть не должно Методы ¡ ¡ ¡ ¡ put() get() remove(key) contains. Value() is. Empty key. Set values
Интерфейс Map n Реализации ¡ ¡ Hash. Map – реализуется хэш-таблицей Tree. Map – реализуется при помощи дерева Linked. Hash. Map – реализуется при помощи двусвязного списка Hashtable – устаревшая реализация, не рекомендуется к использованию
Интерфейс Map import java. util. *; public class Freq { public static void main(String[] args) { Map<String, Integer> m = new Hash. Map<String, Integer>(); // Initialize frequency table from command line for (String a : args) { Integer freq = m. get(a); m. put(a, (freq == null) ? 1 : freq + 1); } System. out. println(m. size() + " distinct words: "); System. out. println(m); } }
Интерфейс Map >java Freq if it is to be it is up to me to delegate 8 distinct words: {to=3, delegate=1, be=1, it=2, up=1, if=1, me=1, is=2}
Сортировка коллекций n n Производится при помощи метода Collections. sort Для сортировки необходимо, чтобы объекты реализовывали интерфейс Comparable
Сортировка коллекций n Интерфейс Comparator public interface Comparator<T> { int compare(T o 1, T o 2); }
Сортировка коллекций import java. util. *; public class Emp. Sort { static final Comparator<Employee> SENIORITY_ORDER = new Comparator<Employee>() { public int compare(Employee e 1, Employee e 2) { return e 2. hire. Date(). compare. To(e 1. hire. Date()); } }; // Employee database static final Collection<Employee> employees =. . . ; public static void main(String[] args) { List<Employee>e = new Array. List<Employee>(employees); Collections. sort(e, SENIORITY_ORDER); System. out. println(e); } }
И ещё… n Set ¡ n List ¡ n Hash. Map Queue ¡ n Array. List Map ¡ n Hash. Set Linked. List Collections ¡ ¡ ¡ empty. List empty. Set empty. Map
Алгоритмы n Сортировка ¡ Merge. Sort n n n Перемешивание ¡ n n Используется генератор случайных чисел Поиск ¡ n Быстрая Устойчивая Бинарный поиск в упорядоченном списке Частота повторений Поиск минимума и максимума
Вопросы?
3 Исключения и коллекции.ppt