Электронная библиотека книг Александра Фролова и Григория Фролова.
Shop2You.ru Создайте свой интернет-магазин
Библиотека
Братьев
Фроловых
[Назад]

Библиотека примеров приложений Java

Оглавление
Базовые типы

Замещающие типы
Без указателей
Массивы
Структурное программи-
рование

Обработка исключений
Возбуждение исключений
Классы обработки исключений
Блок finally
Строки String
Класс Math
Класс Vector
Класс Stack
Словарь на базе Hashtable
Словарь на базе Properties
Цифровые часы
Собственный класс
Наследование классов

Интерфейсы

Назад Вперед

1.2. Замещающие типы данных

В примере демонстрируется использование замещающих типов данных Java.

Исходный текст примера

Архив проекта для Java WorkShop 2.0

Немного теории

В этом примере мы будем демонстрировать методы работы с замещающими типами данных.

Для каждого базового типа данных в языке программирования Java предусмотрен встроенный замещающий класс (wrapper class).

Ниже мы привели таблицу соответствия базовых типов и замещающих классов:

Базовый тип Замещающий класс
boolean Boolean
byte Byte
char Character
short Short
int Integer
long Long
float Float
double Double

Используя конструкторы замещающих классов, вы можете создавать и инициализировать объекты данных.

Важно, что с этими объектами нельзя работать как с переменными базовых классов. Например, им обычно нельзя присваивать новое значение при помощи оператора "=" или складывать оператором "+". Для выполнения любых операций над объектами замещающих классов необходимо применять соответствующие конструкторы и методы, определенные в этих классах.

Описание примера

Пример представляет собой автономную программу Java. Когда она запускается на выполнение, управление получает метод main. Внутри этого метода мы выполняем ряд операций над объектами различных замещающих классов. Результат отображается на консоли.

Работа с объектами класса Boolean

Прежде всего наша программа создает объект с именем fBooleanValue класса Boolean:

Boolean fBooleanValue = new Boolean(true);

При инициализации мы присваиваем объекту значение true, передавая его через параметр конструктору.

Дальше мы проверяем значение, хранящееся в объекте fBooleanValue при помощи условного оператора:

if(fBooleanValue.booleanValue())
{
  . . .
}

Обратите внимание, что для извлечения значения мы воспользовались методом booleanValue, определенным в классе Boolean.

Заметим, что при попытке проверить значение тем способом, который мы использовали для переменных базового типа boolean, компилятор выведет сообщение об ошибке:

if(fBooleanValue) // ОШИБКА!
{
  . . .
}

Дело в том, что не существует механизма неявного преобразования значения, хранящегося в объекте класса Boolean, в переменную базового типа boolean. Подобное замечание касается и других замещающих классов.

В следующем фрагменте кода мы присваиваем переменной класса Boolean новое значение и выводим его на консоль:

fBooleanValue = Boolean.FALSE;
System.out.println("fBooleanValue = " 
  + fBooleanValue);

В классе Boolean определены константы FALSE и TRUE, которые можно использовать так, как это показано выше.

Результат работы фрагмента кода:

* Boolean *

Set fBooleanValue to 'false'
fBooleanValue = false

Работа с объектами класса Byte

Создавая объект класса Byte, мы сразу присваиваем ему максимально возможное значение MAX_VALUE:

Byte bByteValue = new Byte(Byte.MAX_VALUE);
System.out.println("bByteValue = " 
  + bByteValue);

В каждом классе, замещающем численные базовые типы, определены константы MAX_VALUE и MIN_VALUE. Вы можете использовать их, например, для проверки выхода значения из допустимых границ.

В следующем фрагменте кода мы присваиваем объекту bByteValue новое значение:

bByteValue = new Byte((byte)25);
System.out.println("bByteValue = " 
  + bByteValue.byteValue());

Так как конструктор класса Byte принимает один параметр типа byte, нам пришлось выполнять явное преобразование типа int в тип byte.

Ниже мы показали, что может произойти, если вы по ошибке попытаетесь сложить два объекта класса Byte при формировании текстовой строки:

Byte add = new Byte((byte)26);
System.out.println("bByteValue + add = " 
  + bByteValue + add);

В результате выполнения этой операции текстовая строка, представляющая объект bByteValue, будет слита с текстовой строкой объекта add:

Результат работы фрагмента кода:

* Byte *

bByteValue = 127
bByteValue = 25
bByteValue + add = 2526

Работа с объектами класса Character

Класс Character используется для работы с символами Unicode вместо базового типа char.

В нашем примере мы создаем объект этого класса chCharValue, инициализируя его символом "*", а затем выводим результат на консоль:

Character chCharValue = new Character('*');
System.out.println("chCharValue = " 
+ chCharValue);

При необходимости с помощью метода charValue нетрудно получить для объекта класса Character значение базового типа char:

char chv = chCharValue.charValue();
System.out.println("chv = " + chv);

Результат работы фрагмента кода:

* Character *

chCharValue = *
chv = *

Работа с объектами класса Short

Приемы работы с объектами класса Short во многом аналогичны приемам, которые можно использовать для объектов класса Byte или объектов других численных замещающих классов.

Ниже мы создаем объект shShortValue класса Short и затем инициализируем его максимально возможным значением:

Short shShortValue = 
  new Short(Short.MAX_VALUE);
System.out.println("shShortValue = " 
  + shShortValue);

Для того чтобы изменить значение, хранящееся в объекте shShortValue, мы создаем новый объект класса Short. Новое значение передается конструктору в качестве параметра:

shShortValue = new Short((short)2);
System.out.println("shShortValue = " 
  + shShortValue);

Обратите внимание, что нам пришлось прибегнуть к явному преобразованию типа.

Результат работы фрагмента кода:

* Short *

shShortValue = 32767
shShortValue = 2

Работа с объектами класса Integer

В следующем фрагменте кода мы создаем объект iIntValue класса Integer и записываем в него максимально допустимое значение, равное 2147483647:

Integer iIntValue = 
  new Integer(2147483647);
System.out.println("iIntValue = " 
  + iIntValue);

Заметим, что вместо числа 2147483647 мы могли указать константу Integer.MAX_VALUE.

Ниже мы показали, как можно увеличить на 2 значение, хранящееся в объекте iIntValue:

iIntValue = new Integer(2 
  + iIntValue.intValue());
System.out.println("iIntValue = " 
  + iIntValue);

Мы не можем просто прибавить к переменной iIntValue значение 2, так как такая операция не определена. Вместо этого нам приходится вначале получить текущее значение для объекта iIntValue, вызвав метод intValue, а затем сложить его с числом 2 и передать конструктору класса Integer.

Результат работы фрагмента кода:

* Integer *

iIntValue = 2147483647
iIntValue = -2147483647

Работа с объектами класса Long

Создание объекта класса Long и его инициализация выполняется в нашем примере следующим образом:

Long lLongValue = new Long(Long.MAX_VALUE);
System.out.println("lLongValue = " 
  + lLongValue);

При инициализации мы присваиваем объекту lLongValue значение, максимально возможное для класса Long.

Затем мы повторно присваиваем этому же объекту другое значение:

lLongValue = new Long(1234567890L);
System.out.println("lLongValue = " 
  + lLongValue);

Результат работы фрагмента кода:

* Long *

lLongValue = 9223372036854775807
lLongValue = 1234567890

Работа с объектами класса Float

В следующем фрагменте кода создается объект flFloatValue класса Float, которому присваивается начальное значение 0,526:

Float flFloatValue = new Float(526e-3F);
System.out.println("flFloatValue = " 
  + flFloatValue);

Далее мы выводим на консоль значение, максимально возможное для класса Float:

flFloatValue = new Float(Float.MAX_VALUE);
System.out.println("flFloatValue = " 
  + flFloatValue);

В результате выполнения различных арифметических операций возможно получение результата, не являющегося числом. Для представления "нечисел" в классе Float предусмотрена константа NaN (сокращение от Not a Number).

Ниже мы создаем объект, записывая в него значение NaN:

flFloatValue = new Float(Float.NaN);
System.out.println("flFloatValue = " 
  + flFloatValue);

Последний фрагмент кода, демонстрирующего работу с объектами класса Float, выполняет деление -1 на нуль:

float zero = 0;
float fl = -1/zero;
flFloatValue = new Float(fl);
System.out.println("flFloatValue = " 
  + flFloatValue);

При этом в переменной fl базового типа fl оказывается значение, равное отрицательной бесконечности. Мы используем это значение для инициализации объекта flFloatValue класса Float, записывая в него таким образом отрицательную бесконечность.

Результат работы фрагмента кода:

* Float *

flFloatValue = 0.526
flFloatValue = 3.4028235E38
flFloatValue = NaN
flFloatValue = -Infinity

Работа с объектами класса Double

Класс Double предназначен для хранения чисел с плавающей десятичной точкой повышенной точности.

Ниже мы создаем объект dblDoubleValue класса Double и выполняем его инициализацию значением 0.526:

Double dblDoubleValue = new Double(526E-3D);
System.out.println("dblDoubleValue = " 
  + dblDoubleValue);

Затем мы записываем в этот же объект максимально возможное значение и отображаем это значение на консоли:

dblDoubleValue = new Double(Double.MAX_VALUE);
System.out.println("dblDoubleValue = " 
  + dblDoubleValue);

Результат работы фрагмента кода:

* Double *

dblDoubleValue = 0.526
dblDoubleValue = 1.7976931348623157E308

Назад Вперед

[Назад]