Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
GoslingJava2.doc
Скачиваний:
130
Добавлен:
23.02.2016
Размер:
2.39 Mб
Скачать

13.3. Классы-оболочки: общий обзор

Для большинства примитивных типов в языке Java существуют классы, представляющие значения данного типа. Эти классы-оболочки обладают двумя основными функциями. Первая— в них находятся методы и переменные, относящиеся к типу (например, методы строковых преобразований и константы для границ диапазона). Следующий пример показывает, как можно проверить, допустимо ли для данной величины выполнение быстрых вычислений типа float или же ее диапазон выходит за границы, разрешенные для float:

if (value >= Float.MIN_VALUE && value <= Float.MAX_VALUE)

return fasterFloatCalc((float)value);

else

return slowerDoubleCalc(value);

Вторая функция заключается в возможности создания объектов, содержащих значения определенного примитивного типа, для универсальных классов, умеющих работать только со ссылками на Object. Например, объекты Hash table могут содержать только ссылки на Object, а не на примитивные типы. Чтобы использовать int в качестве ключа или элемента в объекте Hashtable, необходимо создать объект Integer, содержащий нужное значение:

Integer keyObj = new Integer(key);

map.put(keyObj, value);

В оставшейся части этой главы рассматриваются методы и константы, входящие в классы-оболочки Java. Некоторые из них являются общими для всех классов, поэтому они будут упомянуты до того, как мы перейдем к конкретным классам.

Следующие конструкторы и методы присутствуют во всех классах-оболочках:

  • Конструктор, который получает значение примитивного типа и создает объект класса (например, конструктор Character(char)).

  • Конструктор, который определяет исходное значение объекта по единственному параметру типа St ring.

  • Метод toString, который возвращает строковое представление объекта.

  • Метод typeValue, который возвращает значение примитивного типа — например, Character.charValue или Boolean.booleanValue.

  • Метод equals, который определяет, равны ли между собой объекты, относящиеся к одному классу.

  • Метод hashCode, который возвращает хеш-код, используемый в хеш-таблицах.

Эти методы имеются в каждом из классов-оболочек, поэтому они не приводятся в приведенных ниже описаниях для конкретных классов. Методы выборки и декодирования системных свойств рассматриваются в разделе “Системные свойства” и также отсутствуют в описаниях классов.

Термин “основание”, иногда используемый в классах-оболочках, соответствует термину “основание системы счисления”. Например, декодирование значения long по основанию 8 означает то же самое, что и перевод в восьмеричную систему счисления.

13.4. Класс Boolean

Класс Boolean служит для представления логического типа boolean. Метод valueOf и конструктор со строковым параметром считают, что строка “true” при любом сочетании символов верхнего и нижнего регистра соответствует true; любая другая строка интерпретируется как false.

13.5. Класс Character

Класс Character служит для представления символьного типа char. Помимо констант MIN_VALUE и MAX_VALUE, он содержит две константы MIN_RADIX и MAX_RADIX, которые равны минимальному и максимальному основанию системы счисления, которые используются методами (описанными ниже) для перевода отдельного цифрового символа в его целочисленный эквивалент и наоборот. Основание должно находиться в диапазоне 2–36; цифры свыше 9 представлены буквами от A до Z или их эквивалентами в нижнем регистре.

public static int digit(char ch, int radix)

Возвращает численный эквивалент цифры ch в системе счисления с основанием radix. Если символ не является допустимой цифрой, то возвращается –1.

public static char forDigit(int digit, int radix)

Возвращает символьное значение заданной цифры в заданной системе счисления. Если цифра является недопустимой в этой системе, возвращается символ \u0000.

Класс Character также содержит методы для работы с различными атрибутами символов, включая регистр.В Unicode имеется три разновидности регистра: верхний, нижний и заглавный (title case). Верхний и нижний регистры, наверное, хорошо знакомы большинству читателей. Заглавный регистр используется для обозначения символов, которые состоят из нескольких компонентов и написание которых изменяется в заголовках, где первые буквы слов обычно делают прописными. Например, в слове “ljepotica” /Слово "ljepotica" на хорватском языке означает "красавица"./ первая буква является символом lj нижнего регистра (\u01c9, символ из набора Extended Latin, используемого при записи хорватских диграфов). Если это слово встретится в названии книги и вы захотите преобразовать первые буквы всех слов в верхний регистр, то необходимо вызвать для них метод toTitleCase, что в нашем случае даст строку “Ljepotica” (в которой используется символ Lj с кодом \u01c8). Если же по ошибке вызвать метод toUpperCase, будет получена неправильная строка “LJepotica” (символ LJ с кодом \u01c7).

Все проблемы в работе с регистрами решаются в соответствии со стандартом Unicode. Например, в грузинском языке буквы верхнего регистра считаются архаичными, и преобразование в верхний регистр обычно нежелательно. Поэтому метод toUpperCase не переводит грузинские буквы нижнего регистра в верхний, хотя метод toLowerCase переведет буквы из верхнего регистра в нижний. Поэтому нельзя быть уверенным в том, что символы, отличающиеся только регистром, станут одинаковыми после вызова toUpperCase или toLowerCase. Тем не менее выражение

Character.toUpperCase(Character.toLowerCase(ch));

дает символ, который можно сравнить с другим символом, полученным аналогичным образом. Если полученные символы совпадают, то исходные символы также были одинаковыми и могли отличаться только регистром.

public static boolean isDefined(char ch)

Возвращает true, если символ ch определен в стандарте Unicode.

public static boolean isLowerCase(char ch)

Возвращает true, если символ ch является буквой нижнего регистра.

public static boolean isUpperCase(char ch)

Возвращает true, если символ ch является буквой верхнего регистра.

public static boolean isTitleCase(char ch)

Возвращает true, если символ ch является буквой заглавного регистра.

public static boolean isDigit(char ch)

Возвращает true, если символ ch является цифрой (см. табл. 4 на стр. ).

public static boolean isLetter(char ch)

Возвращает true, если символ ch является буквой (см.примечание).

public static boolean isLetterOrDigit(char ch)

Возвращает true, если символ ch является буквой или цифрой.

public static boolean isJavaLetter(char ch)

Возвращает true, если с символа ch может начинаться идентификатор в Java— конкретно, если он является буквой или одним из символов ‘_’ или ‘$’.

public static boolean isSpace(char ch)

Возвращает true, если ch является стандартным символом-разделителем— ‘ ‘, ‘\t’, ‘\n’, ‘\f’ или ‘\r’.

public static char toLowerCase(char ch)

Переводит символ ch в нижний регистр.Если эквивалент символа в нижнем регистре отсутствует, возвращается ch.

public static char toUpperCase(char ch)

Переводит символ ch в верхний регистр.Если эквивалент символа в верхнем регистре отсутствует, возвращается ch.

public static char toTitleCase(char ch)

Переводит символ ch в заглавный регистр.Если эквивалент символа в заглавном регистре отсутствует, возвращается ch.

public static int digit(char ch, int radix)

Возвращает численное значение символа ch, рассматриваемого в качестве цифры с заданным основанием. При недопустимом основании возвращается –1. Буквы AZ и az используются для цифр, которые представляют значения 10 и более.

public static char forDigit(int digit, int radix)

Возвращает символ, представляющий цифру digit с заданным основанием radix. Если digit превышает radix или значение radix выходит за пределы разрешенного диапазона, возвращается –1.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]