- •Нововведения 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 с ресурсами
- •Проблема
- •Проблема
- •Проблема
- •Отлов исключений нескольких типов
- •Спасибо за внимание!
- •Дополнительные источники
Подчеркивание в числовых литералах
Нельзя использовать
В начале и в конце числа
_123 123_
Рядом с разделителем целой и дробной части
10_.01 10._01
Перед суффиксами L, F и D |
|
|
1_L |
1.1_F |
1.1_D |
В строковых литералах с числами
"6_____6"
41
Проблема
Имеется:
public static Gender convert(String s) {
Gender g;
if (s.equals("м") || s.equals("муж") || s.equals("муж.") || s.equals("мужской")) { g = Gender.Male;
} else if (s.equals("ж") || s.equals("жен") || s.equals("жен.") || s.equals("женский")) {
g = Gender.Female; } else {
g = Gender.Unknown;
}
return g;
}
42
Проблема
Хотелось бы:
public static Gender convert(String s) { Gender g;
switch (s) {
case "м": case "муж": case "муж.": case "мужской": g = Gender.Male; break;
case "ж": case "жен": case "жен.": case "женский": g = Gender.Female; break;
default:
g = Gender.Unknown; break;
}
return g;
}
43
Строки в предложениях switch
В качестве проверяемого значения можно указывать ссылку на объект строки
В качестве значений для сравнения можно указывать
строковые литералы
ссылки на строки, объявление которых снабжено модификатором final
Сравнение значений производится также, как если бы использовался метод String.equals()
регистр имеет значение
начальные и концевые пробелы имеют значение
44
Проблема
Имеется:
List<Integer> list = new ArrayList<Integer>();
Map<Integer, Comparable<String>> m =
new HashMap<Integer, Comparable<String>>();
// Зачем два раза писать одно и то же???
Хотелось бы:
List<Integer> list = new ArrayList<>();
Map<Integer, Comparable<String>> m = new HashMap<>();
45
Вывод типа (type inference)
Можно использовать, если компилятор из контекста может понять, какие типы нужны
<> – «алмаз» (diamond)
В основном используется при создании объектов в ходе инициализации переменных
При создании объектов нельзя путать отсутствие указания типа (будет обобщенный тип) и оператор алмаз (будет вывод типа)
Из-за механизма стирания в параметризованных типах могут возникать непроверяемые компилятором приведения
46
Проблема
Имеется:
FileWriter out = null; try {
out = new FileWriter(fileName);
//Некоторый вывод данных
}finally {
try {
if (out != null) { out.close();
}
} catch (IOException ex) {
}
}
//По-хорошему ресурсы надо закрывать в блоке finally.
//Закрытие может выбрасывать исключения...
//И так для каждого ресурса…
47
Проблема
Хотелось бы:
try (FileWriter out = new FileWriter(fileName)) { // Некоторый вывод данных
}
try (FileReader in = new FileReader(fileName1); FileWriter out = new FileWriter(fileName2)) {
// Некоторая обработка данных
}
48
Блок try с ресурсами
Можно применять к ресурсам, объекты которых реализуют интерфейс java.lang.AutoCloseable
Содержит метод void close() throws Exception
От него наследуют многие интерфейсы, например java.io.Closeable
Можно объявлять несколько объектов в одном блоке
Закрываются ресурсы в порядке, обратном порядку объявления
49
Блок try с ресурсами
Блок может содержать и блоки catch, и блок finally
Код в них вызывается после того, как ресурс(ы) будут закрыты
Присутствует явное разделение исключений,
возникающих из-за закрытия ресурсов и в ходе выполнения блока try
Если возникают оба вида исключений
Исключения закрытия «замалчиваются» (suppressed)
Все замолчанные исключения можно получить, вызвав метод getSupressed() у выброшенного исключения бизнес-логики
50