Язык программирования JAVA Обработка исключений Массивы и коллекции.

>Язык программирования JAVA Обработка исключений Массивы и коллекции Язык программирования JAVA Обработка исключений Массивы и коллекции

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

>Обработка исключений При возникновении исключительной ситуации метод создает объект, представляющий ошибку Метод может перехватить Обработка исключений При возникновении исключительной ситуации метод создает объект, представляющий ошибку Метод может перехватить этот объект и обработать исключительную ситуацию

>Иерархия исключений в Java Throwable Error – ошибка выполнения JVM (Unchecked) Exception – ошибка Иерархия исключений в Java Throwable Error – ошибка выполнения JVM (Unchecked) Exception – ошибка выполнения кода IOException (Checked) … RuntimeException (Unchecked) …

>Что делать с исключениями? Перехватить и обработать ситуацию Не перехватывать и передать в вызывающий Что делать с исключениями? Перехватить и обработать ситуацию Не перехватывать и передать в вызывающий метод Перехватить, обработать и создать другое исключение

>Синтаксис try{ //Вызов метода, который может создать исключение } catch (ExceptionClass1 ex){ //Обработка исключений Синтаксис try{ //Вызов метода, который может создать исключение } catch (ExceptionClass1 ex){ //Обработка исключений определенного класса } catch (ExceptionClass2 ex){ //Обработка исключений другого класса } finally{ //Финальная обработка, выполняется в любом случае }

>Пример String s = JOptionPane.showInputDialog(“Enter string”); int i; try{ i = Integer.parseInt(s) } catch Пример 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){ Пример 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 Можно создавать свои иерархии исключений При Иерархия исключений Все исключения наследуются от класса Exception Можно создавать свои иерархии исключений При перехвате исключения-суперкласса перехватываются все исключения-подклассы

>Пример try{ //Какие-то действия } catch (Exception ex){ //Будут перехвачены все возможные исключения } Пример try{ //Какие-то действия } catch (Exception ex){ //Будут перехвачены все возможные исключения } try{ //Какие-то действия } catch (Exception ex){} Плохой пример

>Иерархия исключений При перехвате нескольких исключений необходимо их перехватывать от потомка к родителям try{ Иерархия исключений При перехвате нескольких исключений необходимо их перехватывать от потомка к родителям try{ //Какие-то действия } catch (NumberFormatException ex){ // } catch (IOException ex){ // } catch (Exception ex){ // }

>Передача исключений в вызывающие методы При объявлении метода необходимо использовать ключевое слово throws Вызывающий Передача исключений в вызывающие методы При объявлении метода необходимо использовать ключевое слово throws Вызывающий метод будет обязан перехватить такую ситуацию public int myMethod() throws MyException{ //код, который может вызвать исключение }

>Пример public int readInt() throws NumberFormatException{ String s = JOptionPane.showInputDialog(“Enter number”); int i = Пример 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 Как вызвать исключение Для вызова исключения используется оператор 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 PersonException extends Exception {. . .} public class PersonAgeException extends PersonException {. . .}

>Подмена исключений public int setAge() throws PersonException{ String s = JOptionPane.showInputDialog(“Enter age”); try{ int Подмена исключений 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 Массивы и коллекции Язык программирования JAVA

>Массив Структура данных, в которой хранятся объекты одинакового типа Массив Структура данных, в которой хранятся объекты одинакового типа

>Создание массива . . . int[] arr; arr = new int[100];//Создание массива из 100 Создание массива . . . 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 Многомерные массивы . . . 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) Сравнивает экземпляр объекта, на котором вызывается Comparable Интерфейс с одним методом: int compareTo(Object o) Сравнивает экземпляр объекта, на котором вызывается с экземпляром, переданным в качестве параметра Метод compareTo() должен возвращать 0, если объекты равны, число < 0, если данный объект «меньше» переданного, число > 0, если больше

>Comparable public class Person implements Comparable{ private int age; . . . public int 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() и equals() Метод equals сравнивает объекты на равенство, результат – логическое выражение Метод compareTo() возвращает значение целого типа

>Сортировка, поиск и не только… Для сортировки массива используется метод Arrays.sort (используется интерфейс Comparable) Сортировка, поиск и не только… Для сортировки массива используется метод Arrays.sort (используется интерфейс Comparable) Двоичный поиск в массиве:Arrays.binarySearch Заполнение одинаковыми элементами: Arrays.fill Сравнение массивов: Arrays.equals

>Динамические структуры данных (Коллекции) С Java поставляется большой набор классов для работы с коллекциями Динамические структуры данных (Коллекции) С Java поставляется большой набор классов для работы с коллекциями объектов (Java Collections Framework) Преимущества Уменьшение затрат на программирование стандартных алгоритмов Увеличение производительности Единый API для всех манипуляций

>Коллекции Java Collections Framework Интерфейсы Реализации Алгоритмы Коллекции Java Collections Framework Интерфейсы Реализации Алгоритмы

>Коллекции Все коллекции поддерживают типизацию, т.е. доступно объявление List<Student> studentList; Map<String, Student> studentNameMap; Коллекции Все коллекции поддерживают типизацию, т.е. доступно объявление List studentList; Map studentNameMap;

>Работа с коллекциями for-each Iterators for (Object o : collection) System.out.println(o); public interface Iterator<E> Работа с коллекциями for-each Iterators for (Object o : collection) System.out.println(o); public interface Iterator { boolean hasNext(); E next(); void remove(); //optional } for (Iterator it = c.iterator(); it.hasNext(); ) System.out.println(it.next())

>Работа с коллекциями add remove size containsAll addAll removeAll retainAll clear Перевод в массив Работа с коллекциями add remove size containsAll addAll removeAll retainAll clear Перевод в массив Object[] a = c.toArray(); String[] a = c.toArray(new String[0]);

>Интерфейс Set HashSet – хранит элементы в хэш-таблице TreeSet – хранит элементы в “Red-Black Интерфейс Set HashSet – хранит элементы в хэш-таблице TreeSet – хранит элементы в “Red-Black Tree”, с одновременной сортировкой LinkedHashSet – хэш таблица, реализованная при помощи двусвязного списка

>Интерфейс List Доступ к элементам по индексу add(int index) remove(int index) indexOf() lastIndexOf() subList() Интерфейс List Доступ к элементам по индексу add(int index) remove(int index) indexOf() lastIndexOf() subList() size() Может содержать дубликаты элементов Можно использовать цикл for для перебора всех элементов списка

>Интерфейс List ArrayList – реализация с использованием массива LinkedList – реализация с использованием двунаправленного Интерфейс List ArrayList – реализация с использованием массива LinkedList – реализация с использованием двунаправленного списка Vector – устаревшая реализация, использовать не рекомендуется

>Интерфейс Queue Реализует FIFO алгоритм Возможно добавление приоритетов LinkedList PriorityQueue Интерфейс Queue Реализует FIFO алгоритм Возможно добавление приоритетов LinkedList PriorityQueue

>Интерфейс Map Предназначен для хранения пар ключ-значение Одинаковых ключей быть не должно Методы put() Интерфейс Map Предназначен для хранения пар ключ-значение Одинаковых ключей быть не должно Методы put() get() remove(key) containsValue() isEmpty keySet values

>Интерфейс Map Реализации HashMap – реализуется хэш-таблицей TreeMap – реализуется при помощи дерева LinkedHashMap Интерфейс Map Реализации HashMap – реализуется хэш-таблицей TreeMap – реализуется при помощи дерева LinkedHashMap – реализуется при помощи двусвязного списка Hashtable – устаревшая реализация, не рекомендуется к использованию

>Интерфейс Map import java.util.*; public class Freq { public static void main(String[] args) { Интерфейс Map import java.util.*; public class Freq { public static void main(String[] args) { Map m = new HashMap(); // 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 Интерфейс 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 Для сортировки необходимо, чтобы объекты реализовывали интерфейс Сортировка коллекций Производится при помощи метода Collections.sort Для сортировки необходимо, чтобы объекты реализовывали интерфейс Comparable

>Сортировка коллекций Интерфейс Comparator public interface Comparator<T> { int compare(T o1, T o2); } Сортировка коллекций Интерфейс Comparator public interface Comparator { int compare(T o1, T o2); }

>Сортировка коллекций import java.util.*; public class EmpSort { static final Comparator<Employee> SENIORITY_ORDER = new Сортировка коллекций import java.util.*; public class EmpSort { static final Comparator SENIORITY_ORDER = new Comparator() { public int compare(Employee e1, Employee e2) { return e2.hireDate().compareTo(e1.hireDate()); } }; // Employee database static final Collection employees = ... ; public static void main(String[] args) { Liste = new ArrayList(employees); Collections.sort(e, SENIORITY_ORDER); System.out.println(e); } }

>И ещё… Set HashSet List ArrayList Map HashMap Queue LinkedList Collections emptyList emptySet emptyMap И ещё… Set HashSet List ArrayList Map HashMap Queue LinkedList Collections emptyList emptySet emptyMap

>Алгоритмы Сортировка MergeSort Быстрая Устойчивая Перемешивание Используется генератор случайных чисел Поиск Бинарный поиск в Алгоритмы Сортировка MergeSort Быстрая Устойчивая Перемешивание Используется генератор случайных чисел Поиск Бинарный поиск в упорядоченном списке Частота повторений Поиск минимума и максимума

>Вопросы? Вопросы?