- •Глава 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
Класс StringBuilder
Класс StringBuilder идентичен хорошо известному в языке Java классу StringBuffer за одним важным исключением: он не синхронизирован, что означает отсутствие потоковой безопасности. Преимущество класса StringBuilder — более быстрая обработка. Но если Вы используете многопоточность, то вместо класса StringBuilder следует применять класс StringBuffer.
В классе String определен новый конструктор, позволяющий создавать объект типа String из объекта типа StringBuilder. Его синтаксическая запись приведена в следующей строке:
String(StringBuilder strBuildObj)
Интерфейс Appendable
К объекту класса, реализующего интерфейс Appendable, можно добавлять символы или последовательности символов. В интерфейсе Appendable определены следующие два метода:
Appendable append(char ch) throws IOException
Appendable append(CharSequence chars) throws IOException
В первом варианте к вызывающему объекту добавляется символ ch. Во втором — последовательность символов chars. В обоих случаях возвращается ссылка на вызывающий объект.
Интерфейс Iterable
Интерфейс Iterable должен реализовываться любым классом, объекты которого будут обрабатываться в цикле for стиля for-each. Другими словами, для того чтобы корректно обрабатывать объект в цикле for стиля for-each, в его классе должен быть реализован интерфейс Iterable. Этот интерфейс — настраиваемый тип, общий вид его объявления приведен в следующей строке:
interface Iterable<T>
В интерфейсе Iterable определен один метод iterator(), синтаксическая запись которого показана в следующей строке:
Iterator<T> iterator()
Метод возвращает итератор для набора элементов, содержащихся в вызывающем объекте.
Интерфейс Readable
Интерфейс Readable показывает, что объект можно использовать как поставщик символов. В нем определен метод read (), приведенный в следующей строке:
int read(CharBuffer cb) throws lOException
Этот метод читает символы в переменную сb. Он возвращает количество прочитанных символов или -1, если встретился конец файла (EOF).
Новые методы побитной обработки классов Integer и Long
Несколько методов побитной обработки добавлены в числовые оболочки типов Integer и Long. Методы побитных манипуляций типа Integer приведены в табл. 10.2. В тип Long включены аналогичные методы за исключением того, что они обрабатывают данные типа long. Их перечень дан в табл. 10.3
Таблица 10.2. Методы побитной обработки, добавленные в тип Integer |
||
Метод |
Описание |
|
static int bitCount(int num) |
|
Возвращает количество единичных битов в |
|
|
num |
static int highestOneBit |
|
Определяет позицию самого старшего раз- |
(int num) |
|
ряда с единичным битом в num. Возвращает |
|
|
значение, в котором установлен только най- |
|
|
денный самый старший бит. Если нет еди- |
|
|
ничных битов, возвращает 0 |
static int lowestOneBit |
|
Определяет позицию самого младшего раз- |
(int num) |
|
ряда с единичным битом в num. Возвращает |
|
|
значение, в котором установлен только най- |
|
|
денный самый младший бит. Если нет еди- |
|
|
ничных битов, возвращает 0 |
Листинг 10.2. Демонстрация нескольких новых методов побитных манипуляций
в классе Integer
class Bits {
public static void main(String args[]) {
int n = 170; // 10101010
System.out.println("Value in binary: 10101010");
System.out.println("Number of one bits: " +
Integer.bitCount(n));
System.out.println("Highest one bit: " +
Integer.highestOneBit(n));
System.out.println("Lowest one bit: " +
Integer.lowestOneBit(n));
System.out.println("Number of leading zeros : " +
Integer.numberOfLeadingZeros(n));
System.out.println("Number of trailing zeros : " +
Integer.numberOfTrailingZeros(n));
System.out.println("\nBeginning with the value 1, " +
"rotate left 16 times.");
n = 1;
for(int i=0; i < 16; i++) {
n = Integer.rotateLeft(n, 1);
System.out.println(n);
}
}
}
Далее приведен вывод результатов работы программы из листинга I0.2:
Value in binary: 10101010
Number of one bits: 4
Highest one bit: 128
Lowest one bit: 2
Number of leading zeros: 24
Number of trailing zeros: 1
Begining with the value X, rotate left 16 times.
2
4
8
16
32
64
128
256
512
1024
2048
4096
8192
16384
32768
65536
