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

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

Оглавление
Базовые типы
Замещающие типы

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

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

Интерфейсы

Назад Вперед

1.1. Базовые типы данных

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

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

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

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

Согласно описанию Java, в этом языке программирования предусмотрены следующие типы данных:

  • базовые;
  • замещающие

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

Тип Размер, бит Значение по умолчанию Минимальное значение Максимальное значение
byte 8 0 -128 127
char 16 'x0' 0 65535
short 16 0 -32768 32767
int 32 0 -2147483648 2147483647
long 64 0 -9223372036854775808 9223372036854775807
float 32 0.0F -224*10104 224*10104
double 64 0.0D -253*10970 253*10970

Логический тип boolean может принимать только два значения: false и true. Они никаким образом не соотносятся со значениями численных типов. Поэтому вы не можете выполнить преобразование типа boolean, например, в тип int.

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

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

Наш пример представляет собой автономную программу Java. Когда она запускается, управление передается методу main:

public class BaseTypes 
{
  public static void main(String args[]) 
  {
    . . .
  }
}

В этом методе мы последовательно выполняем ряд операций над переменными различных базовых типов.

Перед началом каждой серии операций мы выводим на консоль название соответствующего типа данных.

* boolean *

Set fBooleanValue to 'false'
fBooleanValue = false

* byte *

bByteValue = 127
bByteValue = -128
. . .

Работа с переменными типа boolean

Прежде всего мы выполняем инициализацию переменной fBooleanValue, записывая в нее значение true:

boolean fBooleanValue = true;

Заметим, что так как логическое значение не соотносится с численным, мы не можем выполнить такую инициализацию, записав, например, единицу в переменную fBooleanValue. Такая попытка будет отвергнута еще на этапе компиляции:

boolean fBooleanValue = 1; // ОШИБКА!

Очень часто переменные типа boolean применяются совместно с условными операторами. В нашем примере мы проверяем значение переменной fBooleanValue, и если оно равно true, выполняем с этой переменной некоторые действия:

if(fBooleanValue)
{
  . . .
}

Прежде всего, мы записываем в переменную fBooleanValue значение false:

System.out.println(
  "Set fBooleanValue to 'false'");
fBooleanValue = false;

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

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

Вот фрагмент текста, который выводится на консоль при работе с переменной типа boolean:

* boolean *

Set fBooleanValue to 'false'
fBooleanValue = false

В исходном тексте нашего примера есть строка, закрытая символом комментария:

// ERROR: Incompatible Type. 
// Can't convert boolean to int
// int i = fBooleanValue;

Здесь мы пытаемся присвоить переменной типа int значение логической переменной. Как мы уже говорили, логическая переменная не имеет никакого численного значения, поэтому попытка будет отвергнута компилятором.

Работа с переменными типа byte

Переменная типа byte занимает в оперативной памяти один байт. В нашем примере мы создаем переменную этого типа с именем bByteValue, а затем инициализируем ее:

byte bByteValue = 126;

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

bByteValue += 1;
System.out.println("bByteValue = " 
  + bByteValue);
    
bByteValue += 1;
System.out.println("bByteValue = " 
  + bByteValue);

Так как максимальное значение переменной типа byte равно 127, то после второго увеличения происходит переполнение:

* byte *

bByteValue = 127
bByteValue = -128

В результате значение переменной bByteValue становится равным -128.

Работа с переменными типа char

Создавая переменную типа char с именем chCharValue, мы инициализируем ее следующим образом:

char chCharValue = '*';

Затем наша программа отображает текущее значение переменной на консоли, увеличивает это значение на единицу и отображает вновь:

System.out.println("chCharValue = " 
  + chCharValue);
    
chCharValue += 1;
System.out.println("chCharValue = " 
  + chCharValue);

В первый раз отображается символ *, а во второй - символ +.

Главное, что нужно помнить при работе с переменными типа char, это то что для представления символов в них применяется кодировка Unicode. В этой кодировке каждый символ представляется 16-разрядным значением, в котором помимо кода символа имеется и номер набора символов.

В нашем примере мы присваиваем переменной chCharValue значение, равное 0x0455, а затем отображаем полученный символ на консоли:

chCharValue = 0x0455;
System.out.println("chCharValue = " 
  + chCharValue);

Вот что там появится:

* char *

chCharValue = *
chCharValue = +
chCharValue = 3/4

Работа с переменными типа short

Когда вы работаете с переменными типа short, не следует забывать, что максимальное значение, которое можно в них записать, равно 32767.

В нашем примере мы инициализируем переменную типа short с именем shShortValue максимально допустимым значением, а затем увеличиваем на 2:

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

В результате происходит переполнение и значение переменной становится равным -32767.

Далее мы преобразуем значение, хранящееся в переменной chCharValue типа char к переменной типа short и выодим результат на консоль:

shShortValue = (short)chCharValue;
System.out.println("Value of chCharValue = "
  + shShortValue);

Вот что мы увидим на консоли:

* short *

shShortValue = 32767
shShortValue = -32767
Value of chCharValue = 1109

Число 1109 есть ни что иное, как десятичное значение числа 0x0455, записанное нами в переменную chCharValue на одном из предыдущих этапов.

Работа с переменными типа int

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

Вначале мы инициализируем переменную iIntValue максимальным значением 2147483647, а потом увеличиваем содержимое переменной на 2:

int iIntValue = 2147483647;

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

Ниже представлен результат работы этого фрагмента программы:

* int *

iIntValue = 2147483647
iIntValue = -2147483647

Работа с переменными типа long

Аналогичные действия выполняются и над переменной lLongValue типа long:

System.out.println("\n* long *\n");
    
long lLongValue = 9223372036854775807L;
    
System.out.println("lLongValue = " + 
  lLongValue);
    
lLongValue += 1;
System.out.println("lLongValue = " 
  + lLongValue);

После увеличения значения переменной lLongValue не единицу происходит переполнение:

* long *

lLongValue = 9223372036854775807
lLongValue = -9223372036854775808

Работа с переменными типа float

Наша программа инициализирует переменную типа float с именем flFloatValue значением 0.526, представленным в следующем виде:

float flFloatValue = 526e-3F;

Затем мы отображаем исходное число и делим его на три:

System.out.println("flFloatValue = " 
  + flFloatValue);    
    
flFloatValue /= 3;
System.out.println("flFloatValue = " 
  + flFloatValue);

Значение полученной в результате периодической дроби выводится на консоль:

* float *

flFloatValue = 0.526
flFloatValue = 0.17533334

Работа с переменными типа double

В этом фрагменте программы выполняются те же самые действия, что и в предыдущем, однако переменная имеет тип double:

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

Тип данных double допускает вычисления с удвоенной точностью. Поэтому полученная периодическая дробь будет содержать больше значащих цифр, чем в случае типа float:

* double *

dblDoubleValue = 0.526
dblDoubleValue = 0.17533333333333334

Назад Вперед

[Назад]