Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Язык программирования JAVA.pdf
Скачиваний:
373
Добавлен:
02.05.2014
Размер:
2.57 Mб
Скачать

converted to PDF by BoJIoc

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.

converted to PDF by BoJIoc

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 является буквой верхнего регистра.

converted to PDF by BoJIoc

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.

13.6. Класс Number

Абстрактный класс Number расширяется всеми классами-оболочками, представляющими числовые примитивные типы: Integer, Long, Float и Double. Каждый из этих классов содержит конструкторы, которые присваивают объекту либо значение соответствующего примитивного типа, либо представляющей его строки. В том случае, если строка неверна, конструктор со строковым параметром возбуждает исключение NumberFormatException.

converted to PDF by BoJIoc

Абстрактные методы Number возвращают значение объекта, преобразованное в один из следующих числовых типов:

public int intValue()

public int longValue()

public int floatValue()

public int doubleValue()

Каждый класс, расширяющий Number, переопределяет эти методы для преобразования своего типа в любой другой по тем же правилам, которые применяются при явном приведении типов. Например, для объекта Float со значением 32.87 метод intValue возвращает 32 — столько же, сколько дает выражение (int)32.87.

Кроме того, каждый числовой класс содержит следующие методы и константы:

Статический метод toString(тип), который возвращает объект String для заданного значения примитивного типа. Если строка не подходит к формату данного типа, конструктор возбуждает исключение Number FormatException.

Статический метод valueOf(String), который возвращает объект числового типа по строке. Все эти методы возбуждают NumberFormatException, если содержимое строки не является допустимым представлением примитивного типа.

Статические final-константы с именами MIN_VALUE и MAX_VALUE для минимального и максимального значения, принимаемого переменными типа.

13.7. Класс Integer

Класс Integer расширяет Number и служит для представления типа int в виде класса. Для типов short и byte классы-оболочки отсутствуют, поэтому соответствующие значения должны храниться в объектах Integer. Помимо стандартных методов класса Number, класс Integer содержит следующие методы:

public static int parseInt(String str, int radix)

throws NumberFormatException

Возвращает значение типа int, вычисленное по строке str в системе счисления с заданным основанием radix. Если преобразование с заданным основанием невозможно, возбуждается исключение NumberFormat Exception.

public static int parseInt(String str) throws NumberFormatException

Эквивалентен parse Int(str, 10).

public static Integer valueOf(String str, int radix) throws NumberFormatException

Аналогично parseInt(str, Radix), за исключением того, что вместо int возвращается объект

Integer.

public static String toString(int i, int radix)

Дополнительный статический метод, который возвращает объект String, представляющий i в системе счисления с заданным основанием radix. Стандартный метод toString предполагает работу в десятичной системе счисления.