- •Нововведения Java 5.0.
- •Цели занятия
- •Статический импорт
- •Автоупаковка / автораспаковка
- •Автоупаковка / автораспаковка
- •Автоупаковка / автораспаковка
- •Аргументы переменной длины
- •Аргументы переменной длины
- •Особенности переменного
- •Настраиваемые типы (generic)
- •Настраиваемые типы
- •Настраиваемые типы
- •Настраиваемые типы
- •Настраиваемые типы
- •Настраиваемые типы
- •Ограниченные типы
- •Ограниченные типы
- •Ограниченные типы
- •Ограниченные типы
- •Метасимвольный аргумент
- •Метасимвольный аргумент
- •Метасимвольный аргумент
- •Метасимвол с ограничениями
- •Настраиваемые методы
- •Настраиваемые методы
- •Настраиваемые методы
- •Настраиваемые методы
- •Настраиваемые методы
- •Ряд особенностей
- •Ряд особенностей
- •Ряд особенностей
- •Ряд особенностей
- •Ряд особенностей
- •Ряд особенностей
- •Ряд особенностей
- •Ряд особенностей
- •Ряд особенностей
- •Ряд особенностей
- •Ряд особенностей
- •Ряд особенностей
- •Ошибки неоднозначности
- •Улучшенный цикл for(For-each)
- •Работа улучшенного цикла for
- •Обработка многомерных
- •Вывод
- •Перечислимые типы
- •Перечислимые типы
- •Замечания:
- •Метаданные
- •Метаданные
- •Правила сохранения аннотаций
- •Правила сохранения аннотаций
- •Правила сохранения аннотаций
- •Аннотации-маркеры
- •Одночленные аннотации
- •Одночленные аннотации
- •Одночленные аннотации
- •Встроенные аннотации
- •Встроенные аннотации
- •Литература
Нововведения Java 5.0.
Все права защищены. www.haulmont.ru info@haulmont.com |
© HAULMONT, 2013 |
Цели занятия
2 Изучить:
•Статический импорт
•Автоупаковка и автораспаковка (автобоксинг)
•Аргументы переменной длины
•Настраиваемые типы
•Улучшенный цикл for
•Перечислимые типы
•Метаданные
•Форматированный ввод/вывод
•Изменения пакетов
Все права защищены. www.haulmont.ru info@haulmont.com |
© HAULMONT, 2013 |
Статический импорт
3• Имеется:
hypot = Math.sqrt(Math.pow(side1, 2) + Math.pow(side2, 2));
•Хотелось бы:
hypot = sqrt(pow(side1, 2) + pow(side2, 2));
•Импорт элемента типа
import static pkg.TypeName.staticMemberName; import static java.lang.Math.sqrt;
import static java.lang.Math.pow;
•Импорт всех элементов типа import static pkg.TypeName.*; import static java.lang.Math.*;
•Помимо импорта статических членов классов и интерфейсов, определенных в API языка Java, вы можете использовать это средство для импорта статических членов классов и интерфейсов, созданных вами
•
Все права защищены. www.haulmont.ru info@haulmont.com |
© HAULMONT, 2013 |
|
Особенности статического |
4 |
импорта |
• |
Повышает удобство написания программ и |
|
уменьшает объем кода |
• |
Уменьшает удобство чтения программ |
• |
Приводит к конфликтам имен |
• |
Вывод: рекомендуется к использованию |
|
только когда действительно необходим |
|
(статический импорт желателен в тех |
|
случаях, когда статический член |
|
используется многократно) |
Все права защищены. www.haulmont.ru info@haulmont.com |
© HAULMONT, 2013 |
Автоупаковка / автораспаковка
5
• Имеется:
List list = new LinkedList(); list.add(new Integer(1)); list.add(new Integer(10));
• Хотелось бы:
List list = new LinkedList(); list.add(1);
list.add(10);
•Автоупаковка – процесс автоматической инкапсуляции данных простого типа в экземпляр соответствующего ему класса- обертки в случаях, когда требуется значение
ссылочного типа
Все права защищены. www.haulmont.ru info@haulmont.com |
© HAULMONT, 2013 |
Автоупаковка / автораспаковка
6
• Автораспаковка – процесс автоматического извлечения примитивного значения из объекта- упаковки в случаях, когда требуется значение примитивного типа
List list = new LinkedList(); list.add(1);
int b = (Integer)list.get(0) + 10;
• С появлением Java 2 v5.0 стало возможным использование объекта типа Boolean для управления оператором if и любыми операторами цикла языка Java
Boolean b;
//
while (b) { //
Все права защищены. www.haulmont.ru info@haulmont.com |
© HAULMONT, 2013 |
Автоупаковка / автораспаковка
7
• Кроме удобства, которое предоставляет механизм автоупаковки/распаковки, он может помочь в предупреждении ошибок
• Так как автоупаковка всегда создает правильный объект, а автораспаковка всегда извлекает надлежащее значение, не возникает ситуаций для формирования неверного типа объекта или значения
• В тех случаях, когда вам нужен тип, отличающийся от созданного автоматическим процессом, вы и сейчас можете упаковывать и распаковывать значения вручную так, как делали это раньше
Все права защищены. www.haulmont.ru info@haulmont.com |
© HAULMONT, 2013 |
|
Особенности автоупаковки |
8 |
Происходит при присваивании, вычислении |
• |
|
|
выражений и при передаче параметров |
• |
Объекты создаются без использования |
|
ключевого слова new |
|
Integer i = 15; |
• |
Ошибочно полагать, что примитивные типы не |
|
нужны (для хранения элементарных типов |
|
данных из-за более высокой |
|
производительности применяются базовые |
|
типы, а не объекты) |
• |
Автоупаковка требует существенных ресурсов |
• |
Злоупотреблять автоупаковкой не стоит |
Все права защищены. www.haulmont.ru info@haulmont.com |
© HAULMONT, 2013 |
Аргументы переменной длины
9
• Имеется:
int s1 = sum(new int[] {1, 2}); int s2 = sum(new int[] {1, 2, 3});
• Хотелось бы:
int s1 = sum(1, 2);
int s2 = sum(1, 2, 3, 4);
Все права защищены. www.haulmont.ru info@haulmont.com |
© HAULMONT, 2013 |
Аргументы переменной длины
10 Пример 1
int sum(int ... a) { int s = 0;
for (int i = 0; i < a.length; i++) s += a[i];
return s;
}
int s2 = sum(1, 2, 3);
int s1 = sum(new int[] {1, 2});
Все права защищены. www.haulmont.ru info@haulmont.com |
© HAULMONT, 2013 |