
- •Нововведения Java5
- •План лекции
- •Проблема
- •java.lang.CharSequence
- •java.lang.StringBuilder
- •java.lang.Appendable
- •java.lang.Readable
- •Проблема
- •Форматированные ввод и вывод
- •java.util.Formatter
- •java.util.Formatter
- •java.util.Formatter
- •java.util.Formatter
- •Строка форматирования
- •Преобразующие спецификаторы формата
- •Возможности форматирования
- •Возможности форматирования
- •Возможности форматирования
- •Метод printf()
- •java.util.Scanner
- •java.util.Scanner
- •java.util.Scanner
- •java.util.Scanner
- •java.util.Scanner
- •Проблема
- •Обновленные коллекции
- •Проблема
- •Обновленная рефлексия
- •Пример использования аннотаций
- •Проблема
- •java.util.concurrent
- •java.util.concurrent
- •Изменения в пакете java.lang
- •Изменения в пакете java.util
- •Нововведения Java7
- •План лекции
- •Проблема
- •Бинарные литералы
- •Проблема
- •Подчеркивание в числовых литералах
- •Подчеркивание в числовых литералах
- •Проблема
- •Проблема
- •Строки в предложениях switch
- •Проблема
- •Вывод типа (type inference)
- •Проблема
- •Проблема
- •Блок try с ресурсами
- •Блок try с ресурсами
- •Проблема
- •Проблема
- •Проблема
- •Отлов исключений нескольких типов
- •Спасибо за внимание!
- •Дополнительные источники

java.util.Scanner
Использование
Считывает лексемы из указанного источника
Лексема – обособленная посредством разделителей порция входных данных, определяемая регулярным выражением, задающим формат ввода
Разделители можно настроить
Шаблон регулярного выражения можно задать собственный
Существуют готовые методы для базовых типов данных
21

java.util.Scanner
Важные методы
boolean hasNextType(...)
Возвращает true, если доступна следующая лексема указанного типа, иначе false
boolean hasNext()
boolean hasNext(java.util.regex.Pattern
pattern)
boolean hasNext(String pattern)
boolean hasNextByte()
boolean hasNextBigInteger()
...
22

java.util.Scanner
Важные методы
Type nextType(...)
Возвращает значение следующей лексемы. Выбрасывает java.util.NoSuchElementException
String next()
String next(Pattern pattern)
String next(String pattern)
int nextInt()
double nextDouble()
...
23

java.util.Scanner
Пример использования
Scanner in = new Scanner(System.in); double sum = 0.0;
while (in.hasNext()) {
if (in.hasNextDouble()) sum += in.nextDouble();
else
if ((in.next()).equals("done")) break;
else return;
}
...
24

Проблема
Имеется:
List l = new LinkedList(); l.add(5);
Object I = l.get(0); int i = 0;
if (I instanceof Integer) i = (Integer)I;
Хотелось бы:
List<Integer> l = new LinkedList<Integer>(); l.add(5);
int i = l.get(0);
25

Обновленные коллекции
Все интерфейсы коллекций стали параметризованными
Включая итераторы!
Все классы коллекций стали параметризованными
Обновился класс java.util.Collections
Прежние методы модифицированы для работы с параметризованными типами
Появились новые методы
Появился новый тип оболочек (Checked), динамически обеспечивающих безопасность типов при работе с коллекцией
26

Проблема
Имеется:
public Circle createAnotherLikeThis(Circle circle) throws Throwable {
Class cls = circle.getClass();
Class[] types = {Double.TYPE};
Constructor constr = cls.getConstructor(types);
Object[] args = {circle.getR()};
return (Circle) constr.newInstance(args);
}
Хотелось бы:
public Circle createAnotherLikeThat(Circle circle) throws Throwable { Class<? extends Circle> cls = circle.getClass();
Constructor<? extends Circle> constr = cls.getConstructor(Double.TYPE);
return constr.newInstance(circle.getR());
}
27

Обновленная рефлексия
Классы Class, Constructor теперь настраиваемые
Допускается использование аргументов переменной длины
Добавлен интерфейс аннотированного элемента java.lang.reflect.AnnotatedElement
Этот интерфейс реализуются всеми классами, объекты которых представляют элементы, способные иметь аннотации
Методы интерфейса позволяют проверить наличие аннотации и получить объект аннотации
28

Пример использования аннотаций
import java.lang.annotation.*; import java.lang.reflect.*;
@Retention(RetentionPolicy.RUNTIME)
@interface MyAnnotation { String str(); int val(); }
class Meta {
@MyAnnotation(str = "Two parameters", val = 19) public static void myMeth(String str, int i) {
try {
Class c = Class.forName("Meta");
Method m = c.getMethod("myMeth", String.class, int.class); MyAnnotation a = m.getAnnotation(MyAnnotation.class); System.out.printf("%s %d", a.str(), a.val());
}
catch (Exception c) {/*Обработка*/};
}
public static void main(String[] args) { myMeth("test", 10);
}
}
29

Проблема
Имеется:
Заложенные в языке средства синхронизации и взаимодействия потоков инструкций универсальные, но низкоуровневые
Организация взаимодействия потоков часто требует значительных усилий при написании кода
Хотелось бы:
Высокоуровневый инструментарий
Готовые решения для часто встречающихся ситуаций
30