Урок 5. Классы обертки

Как мы говорили в предыдущем уроке, в Java для каждого примитивного типа существует соответствующий простой объект данных или, как говорится, класс оболочка.

Учитывая примитивный тип (все имена которого начинаются строго с первой строчной буквы), соответствующий объект данных получается, по существу, с заглавной буквы, как показано в следующей таблице:

Примитивный типКласс-оболочка
byteByte
shortShort
intInteger
longLong
floatFloat
doubleDouble
charCharacter
booleanBoolean

Хотя на первый взгляд может показаться, что есть небольшая разница между примитивным типом и его «обернутым» аналогом (также часто называемым «упакованным в коробку»), между ними существует фундаментальное различие: примитивные типы не являются объектами и у них нет связанного с ними класса, и поэтому они должны обрабатываться иначе, чем другие типы (например, они не могут использоваться в коллекциях, которые будут предметом будущих уроков) и не могут иметь методов.

Чтобы избежать этого различия, Java делает готовые классы доступными для содержания и «оболочки» примитивных типов. Фактически, мы можем думать о классе-оболочке точно так же, как обертка, единственная цель которой — содержать примитивное значение, делая его, с одной стороны, объектом и «украсив» его методами, которые в противном случае не имели бы своего естественного местоположения.

Все классы-оболочки определены в пакете java.lang и квалифицируются как final, поэтому наследовать от них невозможно. Более того, все эти классы неизменяемы, т.е. изменить их значение после построения невозможно.

Хотя Boolean и являются Character производными непосредственно от Object, все объекты данных числового типа являются производными от Number, который, в свою очередь, является прямым потомком Object.

Урок 5. Классы обертки

Зачем нужны классы-оболочки в Java?

Разработчиками языка Java было принято очень хорошее решение отделить примитивные типы и классы-оболочки, указав при этом следующее:

  • Используйте классы-обертки, когда работаете с коллекциями.
  • Используйте примитивные типы для того, чтобы ваши программы были максимально просты.

Еще одним важным моментом является то, что примитивные типы не могут быть null, а классы-оболочки — могут.

От простых типов к объектам данных

Хотя в Java 1.5 введена концепция «автоупаковка и распаковка», которую мы рассмотрим на конкретном уроке, переход от примитивного типа к его обернутой версии в принципе прост, но трудоемок.

Например, обычный int занимает меньше места, и если над ним не планируется проводить особые операции, ваш компьютер будет работать быстрее.

В свою очередь, с помощью класса-оболочки Integer можно выполнять специальные операции — например, перевести текст в число (с помощью метода .parseInt() для Integer-а ). Если попробовать сделать это с помощью кода самому придется изрядно повозиться.

public static void main(String[] args) {
   int val = 44;
   //для данного примитивного типа создается класс-оболочка
   Integer value = new Integer(val);
   //значение можно "извлечь" из класса-оболочки
   int valueBack = value.intValue();
}

Специальные методы парсинга

Классы-оболочки — это также место в Java, где очень полезные методы используются для анализа строк и преобразования их в числовые значения, например:

public static void main(String[] args) {
   String fortyThree= "43";
   Integer q = new Integer(fortyThree);
}

Когда мы используем эти методы для преобразования, нам нужно обрабатывать любое генерирование ошибок. На самом деле не все возможные последовательности символов являются числами, возьмем, например, следующий фрагмент:

public static void main(String[] args) {
   String fortyThree= "fortyThree";
   Integer q = new Integer(fortyThree);
{

Парсер не сможет успешно обработать строку, и мы получим ошибку, о которой JVM сообщает с помощью исключения NumberFormatException (подробнее об этом позже).

Строка

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

Оцените статью
Добавить комментарий