Java 5 - Презентация
Опубликовано: 06.09.2018
Презентация «Java 5» . Размер 113 КБ. Автор: Geo .
№ | Слайд | Текст |
1 |
Новые возможности Java 5Новые возможности Java 5. Java Advanced. Презентация Java - программирования |
|
2 |
Краткое содержаниеКраткое содержание. Что такое generic Реализация Generic Смешение generic и не generic-кода Autoboxing Расширенный for Varargs и format Static Import Перечисления Заключение. Java Advanced / Новые возможности Java 5. Презентация системы обучения Java Middle Developer U-Rise |
|
3 |
Что такое GenericЧто такое generic. Часть 1. |
|
4 |
Параметризация классаЧто такое Generic. Generic ? параметризация класса времени компиляции Совместимость типов проверяется при компиляции Во время исполнения информация о фактическом типе отсутствует Единая реализация Template – параметризация класса времени исполнения. Java Advanced / Новые возможности Java 5. |
|
5 |
Generics и коллекцииGenerics и коллекции. Коллекции, множетсва, списки, … параметризуются типом элемента Collection<E> Set<E> List<E> … Отображения параметризуются типами ключа и значения Map<K, V> SortedMap<K, V> … Java Advanced / Новые возможности Java 5. |
|
6 |
Пример определения generic-классаПример определения generic-класса. public interface List<E> extends Collection<E> { E get(int i); set(int i, E e); add(E e); Iterator<E> iterator(); ... }. Java Advanced / Новые возможности Java 5. |
|
7 |
Generic ListGeneric List. List<E> ? список элементов E Раньше List list = new List(); list.add(new Integer(1)); Integer i = (Integer) list.get(0); Теперь List<Integer> list = new List<Integer>(); list.add(new Integer(1)); Integer i = list.get(0); Java Advanced / Новые возможности Java 5. |
|
8 |
Подсчет количества словПример. Подсчет количества слов. Map<String, Integer> map = new TreeMap<String, Integer>(); for (Iterator<String> i = c.iterator(); i.hasNext(); ) { String word = i.next(); Integer count = map.get(word); int value = (count == null) ? 0 : count.intValue(); map.put(word, new Integer(value + 1)); }. Java Advanced / Новые возможности Java 5. |
|
9 |
Пример реализации generic-классаПример реализации generic-класса. public class AL<E> implements List<E> { private E[] elements; public AL() { elements = (E[]) new Object[10]; } public E get(int i) { return elements[i]; } ... }. Java Advanced / Новые возможности Java 5. |
|
10 |
Несовместимость generic-типовНесовместимость generic-типов. Generic-типы не совместимы по присваиванию List<Integer> li = new ArrayList<Integer>(); List<Object> lo = li; Иначе — ошибки lo.add(“hello”); Integer li = lo.get(0); // ClassCastException. Java Advanced / Новые возможности Java 5. |
|
11 |
Проверка типов времени исполненияПроверка типов времени исполнения. Класс Collections List<S> checkedList(List<S>, S.class) checkedCollection checkedMap … Java Advanced / Новые возможности Java 5. |
|
12 |
Реализация GenericРеализация Generic. Часть 2. |
|
13 |
Метод void dumpПроблема 1. Метод void dump(Collection<Object> c) { for (Iterator<Object> i = c.iterator(); i.hasNext(); ) { Object o = i.next(); System.out.println(o); } } Вызовы List<Object> l; dump(l); List<Integer> l; dump(l); Java Advanced / Новые возможности Java 5. |
|
14 |
РешениеРешение 1 – wildcard. Метод void dump(Collection<?> c) { for (Iterator<?> i = c.iterator(); i.hasNext(); ) { Object o = i.next(); System.out.println(o); } } Вызовы List<Object> l; dump(l); List<Integer> l; dump(l); Java Advanced / Новые возможности Java 5. |
|
15 |
ПроблемаПроблема 2. Метод void draw(List<Shape> c) { for (Iterator<Shape> i = c.iterator(); i.hasNext(); ) { Shape s = i.next(); s.draw(); } } Вызовы List<Shape> l; draw(l); List<Circle> l; draw(l); Java Advanced / Новые возможности Java 5. |
|
16 |
Bounded wildcardРешение 2 – bounded wildcard. Метод void draw(List<? extends Shape> c) { for (Iterator<? extends Shape> i = c.iterator(); i.hasNext(); ) { Shape s = i.next(); s.draw(); } } Вызовы List<Shape> l; draw(l); List<Circle> l; draw(l); Java Advanced / Новые возможности Java 5. |
|
17 |
Java AdvancedПроблема 3. Метод void addAll(Object[] a, Collection<?> c) { for (int i = 0; i < a.length; i++) { c.add(a[i]); } }. Java Advanced / Новые возможности Java 5. |
|
18 |
Generic-методРешение 3 – generic-метод. Метод <T> void addAll(T[] a, Collection<T> c) { for (int i = 0; i < a.length; i++) { c.add(a[i]); } } Примеры использования addAll(new String[10], new ArrayList<String>()); addAll(new Object[10], new ArrayList<Object>()); addAll(new String[10], new ArrayList<Object>()); addAll(new Object[10], new ArrayList<String>()); Java Advanced / Новые возможности Java 5. |
|
19 |
Новые возможностиПроблема 4. Метод <T> void addAll(Collection<T> c, Collection<T> c2) { for (Iterator<T> i = c.iterator(); i.hasNext(); ) { T o = i.next(); c2.add(o); } } Примеры использования addAll(new AL<Integer>(), new AL<Integer>()); addAll(new AL<Integer>(), new AL<Object>()); Java Advanced / Новые возможности Java 5. |
|
20 |
Bounded type argumentРешение 4 – bounded type argument. Метод <T, S extends T> void addAll(Collection<S> c, Collection<T> c2) { for (Iterator<S> i = c.iterator(); i.hasNext(); ) { S o = i.next(); c2.add(o); } } Примеры использования addAll(new AL<Integer>(), new AL<Integer>()); addAll(new AL<Integer>(), new AL<Object>()); Java Advanced / Новые возможности Java 5. |
|
21 |
МетодРешение 4’ – bounded wildcard. Метод <T> void addAll(Collection<? extends T> c, Collection<T> c2) { for (Iterator<T> i = c.iterator(); i.hasNext(); ) { T o = i.next(); c2.add(o); } } Примеры использования addAll(new AL<Integer>(), new AL<Integer>()); addAll(new AL<Integer>(), new AL<Object>()); Java Advanced / Новые возможности Java 5. |
|
22 |
Пример использованияПроблема 5. Метод <T extends Comparable<T>> T max(Collection<T> c) { … } Пример использования List<Integer> il; Integer I = max(il); class Test implements Comparable<Object> {…} List<Test> tl; Test t = max(tl); Java Advanced / Новые возможности Java 5. |
|
23 |
Upper bounded wcardРешение 5 – upper bounded wcard. Метод <T extends Comparable<? super T>> max(Collection<T> c) { … } Пример использования List<Intger> il; Integer I = max(il); class Test implements Comparable<Object> {…} List<Test> tl; Test t = max(tl); Java Advanced / Новые возможности Java 5. |
|
24 |
Ограничения GenericОграничения Generic. Невозможно создать массив параметра типа Collection<T> c; T[] ta; new T[10]; Невозможно создать массив Generic-классов new ArrayList<List<Integer>>(); List<?>[] la = new List<?>[10]; List<Integer>[] la = new List<Integer>[10]; Java Advanced / Новые возможности Java 5. |
|
25 |
Смешение generic и не-generic кодаСмешение generic и не-generic кода. Часть 3. |
|
26 |
Один классGeneric – один класс. Примеры List<String> ls; List<Integer> li; ls.getClass() == li.getClass() // True ls instanceof List // True ls instanceof List<String> Java Advanced / Новые возможности Java 5. |
|
27 |
Пример кодаПример кода. Collection<Integer> c; Iterator<Integer> i = c.iterator(); Integer max = i.next(); while(i.hasNext()) { Integer next = i.next(); if (next.compareTo(result) > 0) { max = next; } }. Java Advanced / Новые возможности Java 5. |
|
28 |
Код без genericКод без generic. Collection c; Iterator i = c.iterator(); Integer max = (Integer) i.next(); while(i.hasNext()) { Integer next = (Integer) i.next(); if (next.compareTo(result) > 0) { max = next; } }. Java Advanced / Новые возможности Java 5. |
|
29 |
Преобразование типовПреобразование типов. Уничтожение информации о типе List l = new ArrayList<String>(); Добавление информации о типе List<String> l = (List<String>) new ArrayList(); List<String> l1 = new ArrayList(); Unchecked warning. Java Advanced / Новые возможности Java 5. |
|
30 |
AutoboxingAutoboxing. Часть 4. |
|
31 |
Примитивные типы и оберткиПримитивные типы и обертки. Примитивный тип. Тип-обертка. boolean. Boolean. byte. Byte. short. Short. char. Character. int. Integer. long. Long. float. Float. double. Double. void. Void. Java Advanced / Новые возможности Java 5. |
|
32 |
Boxing и unboxingBoxing и unboxing. Boxing – заключение значения примитивного типа в обертку int a = …; new integer(a) unboxing – извлечение значения примитивного типа из обертки integer a = …; a.Intvalue(). Java Advanced / Новые возможности Java 5. |
|
33 |
Генерация кодаAutoboxing. Генерация кода для boxing и unboxing при необходимости Явное приведение типов (Integer) 10 (int) new Integer(10) (Object) 10 Приведение типов “по ходу”. Java Advanced / Новые возможности Java 5. |
|
34 |
Исходный кодПример. Исходный код Integer i1 = 1; Integer i2 = 2; Integer i3 = i1 + i2; Сгенерированный код Integer i1 = Integer.valueOf(1); Integer i2 = Integer.valueOf(2); Integer i3 = Integer.valueOf(i1.intValue() + i2.intValue()); Java Advanced / Новые возможности Java 5. |
|
35 |
Подсчет количеств словПример. Подсчет количеств слов. Map<String, Integer> map = new TreeMap<String, Integer>(); for (Iterator<String> i = c.iterator(); i.hasNext(); ) { String word = i.next(); Integer count = map.get(word); m.put(word, (count == null) ? 1 : count + 1); }. Java Advanced / Новые возможности Java 5. |
|
36 |
Особенности AutoboxingОсобенности Autoboxing. Обработка null при unboxing NullPointerException Сравнение на равенство (==) Примитивные типы сравниваются по значению Обертки сравниваются по ссылке Снижение производительности. Java Advanced / Новые возможности Java 5. |
|
37 |
Расширенный циклРасширенный цикл for. Часть 5. |
|
38 |
Сумма чисел в коллекцииПример. Сумма чисел в коллекции (1). Старый вариант (проверка на null) int sum = 0; for (Iterator<Integer> i = c.iterator(); i.hasNext(); ) { Integer j = i.next(); if (j != null) { sum += j; } }. Java Advanced / Новые возможности Java 5. |
|
39 |
Новый вариантПример. Сумма чисел в коллекции (2). Новый вариант (проверка на null) int sum = 0; for (Integer j : c) { if (j != null) { sum += j; } }. Java Advanced / Новые возможности Java 5. |
|
40 |
Сумма чиселПример. Сумма чисел в коллекции (3). Старый вариант int sum = 0; for (Iterator<Integer> i = c.iterator(); i.hasNext(); ) { sum += i.next(); } Новый вариант int sum = 0; for (int j : c) { sum += j; }. Java Advanced / Новые возможности Java 5. |
|
41 |
Минимум в массивеПример. Минимум в массиве. Старый вариант int min = Integer.MAX_VALUE; for (int i = 0; i < a.length; i++) { if (min > a[i]) min = a[i]; } Новый вариант int min = Integer.MAX_VALUE; for (int i : a) { if (min > i) min = i; }. Java Advanced / Новые возможности Java 5. |
|
42 |
MapПример. Подсчет количеств слов. Map<String, Integer> map = new TreeMap<String, Integer>(); for (String word : c) { Integer count = map.get(word); m.put(word, (count == null) ? 1 : count + 1); }. Java Advanced / Новые возможности Java 5. |
|
43 |
ИнтерфейсИнтерфейс Iterable<E> Позволяет использовать новый for public interface Iterable<T> { Iterator<T> iterator(); } Реализуется стандартными коллекциями. Java Advanced / Новые возможности Java 5. |
|
44 |
Varargs и formatVarargs и format. Часть 6. |
|
45 |
VarargsVarargs. Механизм создания методов, принимающих переменное число параметров. Java Advanced / Новые возможности Java 5. |
|
46 |
МетодыМетоды .format. Позволяют форматировать строки аналогично функции printf Классы Formatter String PrintWriter Пример String.format("(%d, %d)--(%d, %.3f)", 1, 1, 2, 0.5) System.out.format(“Hello %s ", userName). Java Advanced / Новые возможности Java 5. |
|
47 |
Определение методаОпределение метода. Метод format format(String pattern, Object… arguments) Общий случай Последний аргумент может быть объявлен в виде T … <имя аргумента> Реальный тип аргумента T[] Может передаваться либо массив, либо переменное число аргументов. Java Advanced / Новые возможности Java 5. |
|
48 |
Нахождение минимумаПример. Нахождение минимума. Пример метода public static int min(int ... a) { int min = Integer.MAX_VALUE; for (int i : a) { if (min > i) min = i; } return min; } Примеры использования min(3) min(1, 2, 3, -1, -2, -3) min(new int[]{1, 2, 3, -1, -2, -3}). Java Advanced / Новые возможности Java 5. |
|
49 |
Интерфейс FormattableИнтерфейс Formattable. Аналог метода toString() для класса Formattable (%s) Определение интерфейса interface Formattable { void formatTo( Formatter formatter, // куда выводить int flags, // как выводить int width, // мин. ширина поля int precision // макс. ширина поля ) }. Java Advanced / Новые возможности Java 5. |
|
50 |
Static ImportStatic Import. Часть 7. |
|
51 |
Импортирование статических членовИмпортирование статических членов. Импортирование поля import static java.lang.Math.PI; … angle = PI / 2 Импортирования метода import static java.lang.Math.cos; … cos(angle). Java Advanced / Новые возможности Java 5. |
|
52 |
Применение Static ImportПрименение Static Import. При многократном доступе к статическим полям или методам других классов Для методоыв импортируются все перегруженные версии Широкое применение Static Import снижает читаемость кода. Java Advanced / Новые возможности Java 5. |
|
53 |
ПеречисленияПеречисления. Часть 8. |
|
54 |
Пример public final staticКак было раньше. Пример public final static int NEW = 1; public final static int RUNNING = 2; public final static int BLOCKED = 3; public final static int FINISHED = 4; Проблемы Нет проверки типов Нет проверки уникальности Плохая расширяемость Малая информативность. Java Advanced / Новые возможности Java 5. |
|
55 |
Перечислимый типПеречислимый тип. Пример public enum State { NEW, RUNNING, BLOCKED, FINISHED } Каждое перечисление является независимой областью видимости. Java Advanced / Новые возможности Java 5. |
|
56 |
Идентификация переменныхИдентификация переменных. Классом Экземпляром Именем Номером Имя Идентификатор экземпляра Метод name() Номер Может быть передан в конструктор экземпляра Метод ordinal(). Java Advanced / Новые возможности Java 5. |
|
57 |
Перечисления как классыПеречисления как классы. Перечисление может иметь Закрытые конструкторы Поля Методы Абстрактные методы, если они определены в каждом экземпляре Перечисление может реализовывать интерфейсы. Java Advanced / Новые возможности Java 5. |
|
58 |
Меры длиныПример. Меры длины (1). public enum Unit { KILOMETER(1e3), METER(1), MILLIMETER(1e-3); private final double length; private Unit(double length) { this.length = length; } public double getLength() { return length; } }. Java Advanced / Новые возможности Java 5. |
|
59 |
ОперацииПример. Операции (1). public enum Operation { PLUS { double eval(double x, double y) { return x + y; } }, MINUS { double eval(double x, double y) { return x - y; } }, TIMES { double eval(double x, double y) { return x * y; } }, DIVIDE { double eval(double x, double y) { return x / y; } }; abstract double eval(double x, double y); }. Java Advanced / Новые возможности Java 5. |
|
60 |
Double applyПример. Операции (2). double apply(Operation op, double x, double y) { return op.eval(x, y); }. Java Advanced / Новые возможности Java 5. |
|
61 |
Методы работы с перечислениямиМетоды работы с перечислениями. Класс Enum – базовый для перечислений name() – имя ordinal() – номер valueOf(Class, name) – экземпляр по номеру Дополнительные values() – все экземпляры valueOf(name) – экземпляр по имени. Java Advanced / Новые возможности Java 5. |
|
62 |
Вывод соотношений мер длиныПример. Меры длины (2). Вывод соотношений мер длины for (Unit u1 : Unit.values()) { for (Unit u2 : Unit.values()) { System.out.println(String.format( "There are %f %sS in one %s", u2.getLength()/u1.getLength(), u1, u2 )); } }. Java Advanced / Новые возможности Java 5. |
|
63 |
Множество экземпляров перечисленияКласс EnumSet. Множество экземпляров перечисления Храниться побитно Создание EnumSet EnumSet<T> EnumSet.noneOf(T.class) EnumSet<T> EnumSet.allOf(T.class) EnumSet<T> EnumSet.of(e1, e2, …) EnumSet<T> EnumSet.copyOf(EnumSet<T> s) EnumSet<T> EnumSet.copyOf(Collection<T> t) EnumSet<T> EnumSet.complementOf(EnumSet<T> s). Java Advanced / Новые возможности Java 5. |
|
64 |
Отображение из перечисленияКласс EnumMap. Отображение из перечисления Храниться в массиве Создание EnumMap EnumMap<K, V>(K.class) EnumMap<K, V>(EnumMap<K, V>) EnumMap<K, V>(Map<K, V>). Java Advanced / Новые возможности Java 5. |
|
65 |
ЗаключениеЗаключение. Часть 9. |
|
66 |
СсылкиСсылки (1). Generics Tutorial // http://java.sun.com/j2se/1.5/pdf/generics-tutorial.pdf JSR 14 (Generics) // http://jcp.org/en/jsr/detail?id=14 Autoboxing // http://java.sun.com/j2se/1.5.0/docs/guide/language/autoboxing.html JSR 201 (Autoboxing) // http://jcp.org/en/jsr/detail?id=201. Java Advanced / Новые возможности Java 5. |
|
67 |
New Java language faturesСсылки (2). New Java Language Fatures // http://java.sun.com/j2se/1.5.0/docs/relnotes/features.html#lang Enums (JLS) // http://java.sun.com/docs/books/jls/third_edition/html/classes.html#8.9 Import Declarations (JLS) // http://java.sun.com/docs/books/jls/third_edition/html/packages.html#7.5. Java Advanced / Новые возможности Java 5. |
|
68 |
InterfacesСсылки (3). Interfaces (JLS) // http://java.sun.com/docs/books/jls/third_edition/html/interfaces.html. Java Advanced / Новые возможности Java 5. |
|
69 |
ВопросыВопросы. Java Advanced / Новые возможности Java 5. |
|
«Java 5» |