- •Глава 2 3
- •Глава 3 11
- •Глава 10 117
- •Глава 2 Автоупаковка и автораспаковка
- •Обзор оболочек типов и упаковки значений
- •Основы автоупаковки/распаковки
- •Автоупаковка и методы
- •Автоупаковка/распаковка в выражениях
- •Автоупаковка/распаковка логических и символьных значений
- •Помощь автоупаковки/распаковки в предупреждении ошибок
- •Предостережения
- •Глава 3 Настраиваемые типы
- •Что такое настраиваемые типы
- •Простой пример применения настраиваемых типов
- •Средства настройки типов работают только с объектами
- •Различия настраиваемых типов, основанных на разных аргументах типа
- •Как настраиваемые типы улучшают типовую безопасность
- •Настраиваемый класс с двумя параметрами типа
- •Общий вид объявления настраиваемого класса
- •Ограниченные типы
- •Применение метасимвольных аргументов
- •Ограниченные метасимвольные аргументы
- •Создание настраиваемого метода
- •Настраиваемые конструкторы
- •Настраиваемые интерфейсы
- •Типы raw и разработанный ранее код
- •Иерархии настраиваемых классов
- •Использование настраиваемого суперкласса
- •Настраиваемый подкласс
- •Сравнения типов настраиваемой иерархии во время выполнения программы
- •Переопределенные методы в настраиваемом классе
- •Настраиваемые типы и коллекции
- •Стирание
- •Методы-подставки
- •Ошибки неоднозначности
- •Некоторые ограничения применения настраиваемых типов
- •Нельзя создавать объекты, используя параметры типа
- •Ограничения для статических членов класса
- •Ограничения для настраиваемого массива
- •Ограничение настраиваемых исключений
- •Заключительные замечания
- •Глава 4 Вариант For-Each цикла for
- •Описание цикла for-each
- •Обработка многомерных массивов в цикле
- •Область применения цикла for в стиле for-each
- •Использование цикла for в стиле for-each для обработки коллекций
- •Создание объектов, реализующих интерфейс Iterable
- •Глава 5 Аргументы переменной длины
- •Средство формирования списка с переменным числом аргументов
- •Перегрузка методов с аргументом переменной длины
- •Аргументы переменной длины и неоднозначность
- •Глава 6 Перечислимые типы
- •Описание перечислимого типа
- •Методы values() и valueOf()
- •Перечислимый тип в Java — это класс
- •Перечислимые типы, наследующие тип enum
- •Глава 7 Метаданные
- •Описание средства "метаданные"
- •Задание правил сохранения
- •Получение аннотаций во время выполнения программы с помощью рефлексии
- •Листинг 7.3. Получение всех аннотаций для класса и метода
- •Интерфейс AnnotatedElement
- •Использование значений по умолчанию
- •Аннотации-маркеры
- •Одночленные аннотации
- •Встроенные аннотации
- •Несколько ограничений
- •Глава 8 Статический импорт
- •Описание статического импорта
- •Общий вид оператора статического импорта
- •Импорт статических членов классов, созданных Вами
- •Неоднозначность
- •Предупреждение
- •Глава 9 Форматированный ввод/вывод
- •Форматирование вывода с помощью класса Formatter
- •Конструкторы класса Formatter
- •Методы класса Formatter
- •Основы форматирования
- •Форматирование строк и символов
- •Форматирование чисел
- •Форматирование времени и даты
- •Спецификаторы %n и %%
- •Задание минимальной ширины поля
- •Задание точности представления
- •Применение флагов форматирования
- •Выравнивание вывода
- •Флаг запятая
- •Применение верхнего регистра
- •Использование порядкового номера аргумента
- •Применение метода printf() языка Java
- •Класс Scanner
- •Конструкторы класса Scanner
- •Описание форматирования входных данных
- •Несколько примеров применения класса Scanner
- •Установка разделителей
- •Другие свойства класса Scanner
- •Глава 10 Изменения в api
- •Возможность применения настраиваемых типов при работе с коллекциями
- •Обновление класса Collections
- •Почему настраиваемые коллекции
- •Модернизация других классов и интерфейсов для применения настраиваемых типов
- •Новые классы и интерфейсы, добавленные в пакет java.Lang
- •Класс ProcessBulider
- •Класс StringBuilder
- •Интерфейс Appendable
- •Интерфейс Iterable
- •Интерфейс Readable
- •Новые методы побитной обработки классов Integer и Long
- •Методы signum() u reverseBytes()
- •Поддержка 32-битных кодовых точек для символов Unicode
- •Новые подпакеты пакета java.Lang
- •Классы Formatter и Scanner
Флаг запятая
При выводе больших чисел часто могут оказаться полезными разделители групп, в английском языке для этого используются запятые. Например, значение 1234567 гораздо легче читать, если оно отформатировано следующим образом: 1,234,567. Для того чтобы добавить подобные разделители используйте флаг , (запятая). Код, приведенный в следующей строке:
fmt.format("%,.2f", 4356783497.34)
создаст строку, приведенную далее:
4,356,783,497.34
Флаг #
Флаг # может применяться в спецификаторах: %о, %х, %е и %f. В спецификаторах %е и %f флаг # гарантирует наличие десятичной точки в выводимом числе, даже если у него нет десятичных знаков. Если поставить флаг # в спецификатор формата %х, шестнадцатеричное представление числа будет выводиться с префиксом 0х. Вставка флага # в спецификатор %о вызывает вывод числа с ведущими нулями.
Применение верхнего регистра
Как упоминалось ранее, у некоторых спецификаторов формата есть версии, набранные в верхнем регистре (т. е. заглавными буквами), которые вызывают использование заглавных букв для вывода аргументов, когда это возможно. В табл. 9.5 перечислены эти спецификаторы формата и вызываемый ими эффект.
Таблица 9.5. Спецификаторы формата, набранные в верхнем регистре
Спецификатор |
Преобразование формата |
%A |
Вывод шестнадцатеричных цифр от а до f заглавными буквами a-f. Префикс 0x выводится как ОХ и символ р — как P |
%B |
вывод заглавными буквами значений true и false |
%C |
Вывод заглавной буквой соответствующего символьного аргумента |
%E |
Вывод символа е, обозначающего порядок числа, заглавной буквой |
%G |
Вывод символа е, обозначающего порядок числа, заглавной буквой |
%H |
Вывод шестнадцатеричных цифр от а до f заглавными буквами a— f |
%S |
Вывод заглавными буквами соответствующей строки |
%T |
Вывод всех букв в выводной строке заглавными |
%X |
Вывод шестнадцатеричных цифр от а до f заглавными буквами a-f. Необязательный префикс Ох выводится как Ох, если он есть |
Например, вызов:
fmt.format("%X", 250);
создаст приведенную далее строку:
FA
А следующий вызов:
fmt. format* "%E\ 123.1234);
создаст приведенную далее строку:
1.231234Е+2
Использование порядкового номера аргумента
У класса Formatter есть очень полезное свойство, которое позволяет задавать аргумент, к которому следует применить конкретный спецификатор формата. Обычно соответствие между спецификаторами и аргументами, на которые они воздействуют, устанавливается в соответствии с порядком их следования, слева направо. Это означает, что первый спецификатор формата соответствует первому аргументу, второй спецификатор — второму аргументу и т. д. Однако, используя порядковый номер (argument index) или индекс аргумента, Вы можете указать явно, какой спецификатор формата соответствует какому аргументу.
Порядковый номер аргумента указан за знаком % в спецификаторе формата и имеет следующий формат:
n$
Символ n обозначает порядковый номер нужного аргумента, нумерация аргументов начинается с единицы. Рассмотрим пример:
fmt. format (" %3$d %l$d %2$ “, 10, 20, 30 )
Он формирует следующую строку вывода:
30 10 20
Листинг 9.10. Применение относительных номеров аргументов для упрощения создания пользовательского формата вывода даты и времени
import java.util.*;
class FormatDemo6 {
public static void main(String args[]) {
Formatter fmt = new Formatter();
Calendar cal = Calendar.getInstance();
fmt.format("Today is day %te of %<tB, %<tY", cal);
System.out.println(fmt);
}
}
В следующей строке приведен вывод результатов работы программы из листинга 9.10:
Today is day 8 of may, 2004
Благодаря относительному индексированию аргумент cal нужно передать всего один раз вместо трех.
