Язык программирования JAVA Обработка исключений Массивы и коллекции.
Язык программирования JAVA Обработка исключений Массивы и коллекции
Исключения Ошибочная ситуация, возникающая во время выполнения программы, нарушающая нормальный поток выполнения
Обработка исключений При возникновении исключительной ситуации метод создает объект, представляющий ошибку Метод может перехватить этот объект и обработать исключительную ситуацию
Иерархия исключений в Java Throwable Error – ошибка выполнения JVM (Unchecked) Exception – ошибка выполнения кода IOException (Checked) … RuntimeException (Unchecked) …
Что делать с исключениями? Перехватить и обработать ситуацию Не перехватывать и передать в вызывающий метод Перехватить, обработать и создать другое исключение
Синтаксис try{ //Вызов метода, который может создать исключение } catch (ExceptionClass1 ex){ //Обработка исключений определенного класса } catch (ExceptionClass2 ex){ //Обработка исключений другого класса } finally{ //Финальная обработка, выполняется в любом случае }
Пример String s = JOptionPane.showInputDialog(“Enter string”); int i; try{ i = Integer.parseInt(s) } catch (NumberFormatException ex){ ex.printStackTrace(); JOptionPane.showMessageDialog(null,”Exception:”+ex.getMessage()) }
Пример FileInputStream f = null; try{ f = new FileInputStream(filePath); while (f.read() != -1){ byteCount++; } } catch (IOException ex){ JOptionPane.showMessageDialog(null,”Error:”+ex.getMessage()) } finally{ f.close; }
Иерархия исключений Все исключения наследуются от класса Exception Можно создавать свои иерархии исключений При перехвате исключения-суперкласса перехватываются все исключения-подклассы
Пример try{ //Какие-то действия } catch (Exception ex){ //Будут перехвачены все возможные исключения } try{ //Какие-то действия } catch (Exception ex){} Плохой пример
Иерархия исключений При перехвате нескольких исключений необходимо их перехватывать от потомка к родителям try{ //Какие-то действия } catch (NumberFormatException ex){ // } catch (IOException ex){ // } catch (Exception ex){ // }
Передача исключений в вызывающие методы При объявлении метода необходимо использовать ключевое слово throws Вызывающий метод будет обязан перехватить такую ситуацию public int myMethod() throws MyException{ //код, который может вызвать исключение }
Пример public int readInt() throws NumberFormatException{ String s = JOptionPane.showInputDialog(“Enter number”); int i = Integer.parseInt(s); return i; }
Как вызвать исключение Для вызова исключения используется оператор throw public int hireEmp(Person p) throws PersonTooYoungException{ if (p.getAge() < 18) { PersonTooYoungException pe = new PersonTooYoungException(); throw pe; } public int hireEmp(Person p) throws PersonTooYoungException{ if (p.getAge() < 18) { throw new PersonTooYoungException(); }
Создание собственных исключений Пользовательские исключения обычно наследуются от класса Exception public class PersonException extends Exception {. . .} public class PersonAgeException extends PersonException {. . .}
Подмена исключений public int setAge() throws PersonException{ String s = JOptionPane.showInputDialog(“Enter age”); try{ int i = Integer.parseInt(s); return i; } catch (NumberFormatException ex){ throw new PersonAgeException (“Age is invalid”); } }
Использование исключительных ситуаций Заменяйте исключительные ситуации проверкой, если это возможно Не «гасите» исключительные ситуации Передавайте исключения в вызывающий метод Перехватывайте как можно более «мелкие» исключения
Массивы и коллекции Язык программирования JAVA
Массив Структура данных, в которой хранятся объекты одинакового типа
Создание массива . . . 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].getAge());
Многомерные массивы . . . 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]; }
Копирование массивов Массивы – это объекты, следовательно, простое присваивание объектных переменных приведет к тому, что обе переменных будут ссылаться на один и тот же массив Для копирования массивов существует метод System.arraycopy(from, fromIndex, to, toIndex, count)
Comparable Интерфейс с одним методом: int compareTo(Object o) Сравнивает экземпляр объекта, на котором вызывается с экземпляром, переданным в качестве параметра Метод compareTo() должен возвращать 0, если объекты равны, число < 0, если данный объект «меньше» переданного, число > 0, если больше
Comparable public class Person implements Comparable{ private int age; . . . public int compareTo(Object o){ Person p = (Person)o; if (p.age == age) return 0; if (p.age > age) return -1; if (p.age < age) return 1; } }
compareTo() и equals() Метод equals сравнивает объекты на равенство, результат – логическое выражение Метод compareTo() возвращает значение целого типа
Сортировка, поиск и не только… Для сортировки массива используется метод Arrays.sort (используется интерфейс Comparable) Двоичный поиск в массиве:Arrays.binarySearch Заполнение одинаковыми элементами: Arrays.fill Сравнение массивов: Arrays.equals
Динамические структуры данных (Коллекции) С Java поставляется большой набор классов для работы с коллекциями объектов (Java Collections Framework) Преимущества Уменьшение затрат на программирование стандартных алгоритмов Увеличение производительности Единый API для всех манипуляций
Коллекции Java Collections Framework Интерфейсы Реализации Алгоритмы
Коллекции Все коллекции поддерживают типизацию, т.е. доступно объявление List
Работа с коллекциями for-each Iterators for (Object o : collection) System.out.println(o); public interface Iterator
Работа с коллекциями add remove size containsAll addAll removeAll retainAll clear Перевод в массив Object[] a = c.toArray(); String[] a = c.toArray(new String[0]);
Интерфейс Set HashSet – хранит элементы в хэш-таблице TreeSet – хранит элементы в “Red-Black Tree”, с одновременной сортировкой LinkedHashSet – хэш таблица, реализованная при помощи двусвязного списка
Интерфейс List Доступ к элементам по индексу add(int index) remove(int index) indexOf() lastIndexOf() subList() size() Может содержать дубликаты элементов Можно использовать цикл for для перебора всех элементов списка
Интерфейс List ArrayList – реализация с использованием массива LinkedList – реализация с использованием двунаправленного списка Vector – устаревшая реализация, использовать не рекомендуется
Интерфейс Queue Реализует FIFO алгоритм Возможно добавление приоритетов LinkedList PriorityQueue
Интерфейс Map Предназначен для хранения пар ключ-значение Одинаковых ключей быть не должно Методы put() get() remove(key) containsValue() isEmpty keySet values
Интерфейс Map Реализации HashMap – реализуется хэш-таблицей TreeMap – реализуется при помощи дерева LinkedHashMap – реализуется при помощи двусвязного списка Hashtable – устаревшая реализация, не рекомендуется к использованию
Интерфейс Map import java.util.*; public class Freq { public static void main(String[] args) { Map
Интерфейс 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}
Сортировка коллекций Производится при помощи метода Collections.sort Для сортировки необходимо, чтобы объекты реализовывали интерфейс Comparable
Сортировка коллекций Интерфейс Comparator public interface Comparator
Сортировка коллекций import java.util.*; public class EmpSort { static final Comparator
И ещё… Set HashSet List ArrayList Map HashMap Queue LinkedList Collections emptyList emptySet emptyMap
Алгоритмы Сортировка MergeSort Быстрая Устойчивая Перемешивание Используется генератор случайных чисел Поиск Бинарный поиск в упорядоченном списке Частота повторений Поиск минимума и максимума
Вопросы?
lekciya_3_(collections).ppt
- Количество слайдов: 45