Типы данных
Java является строго типизированным языком. Это означает, что любая переменная и любое выражение имеют известный тип еще на момент компиляции. Такое строгое правило позволяет выявлять многие ошибки уже во время компиляции. Все типы данных разделяются на две группы. Первую составляют 8 простых, или примитивных (от английского primitive), типов данных.
Вторую группу составляют объектные, или ссылочные , типы данных. Это все классы, интерфейсы и массивы. В стандартных библиотеках первых версий Java находилось несколько сот классов и интерфейсов, сейчас их уже тысячи. Кроме стандартных, написаны многие и многие классы и интерфейсы, составляющие любую Java-программу.
Примитивные переменные являются действительными хранилищами данных. Каждая переменная имеет значение, не зависящее от остальных. Ссылочные же переменные хранят лишь ссылки на объекты, причем различные переменные могут ссылаться на один и тот же объект.
Переменные используются в программе для хранения данных. Любая переменная имеет три базовых характеристики:
* имя;
* тип;
* значение.
Имя уникально идентифицирует переменную и позволяет обращаться к ней в программе. Тип описывает, какие величины может хранить переменная. Значение – текущая величина, хранящаяся в переменной на данный момент.
Любое объявление переменной имеет свою область действия, границы которой зависят от того, где именно расположено это объявление. При помещении фрагмента текста программы в пару фигурных скобок { } создается новый блок. Блоки в программе на языке Java могут быть вложенными. Переменная доступна в блоке только в том случае, если она определена в этом блоке или в одном из вышестоящих блоков, в который входит текущий блок, например:
// Блок 1
{
int x;
…
// Блок 2
{
int y;
…
// Конец блока 2
}
// Конец блока 1
}
Переменная x определена и в блоке 1 и в блоке 2, а переменная y – только в блоке 2.
Некоторые примеры объявления переменных примитивного типа int с инициализаторами и без таковых:
int a;
int b = 0, c = 3+2;
int d = b+c;
int e = a = 5;
Из примеров видно, что инициализатором может быть не только константа, но и арифметическое выражение. Иногда это выражение может быть вычислено во время компиляции (такое как 3+2), тогда компилятор сразу записывает результат.
Объявление переменных и возможная инициализация при объявлении описываются следующим образом. Сначала указывается тип переменной, затем ее имя и, если необходимо, инициализатор, который может быть константой или выражением, вычисляемым во время компиляции или исполнения программы. В частности, можно пользоваться уже объявленными переменными. Далее можно поставить запятую и объявить новую переменную точно такого же типа.
После объявления переменная может применяться в различных выражениях, в которых будет браться ее текущее значение. Также в любой момент можно изменить значение, используя оператор присваивания, примерно так же, как это делалось в инициализаторах.
Кроме того, при объявлении переменной может быть использовано ключевое слово final. Его указывают перед типом переменной, и тогда ее необходимо сразу инициализировать и уже больше никогда не менять ее значение.
Простейший пример объявления final-переменной:
final double pi=3.1415;
Целочисленные типы – это byte, short, int, long, char.
Название | Длина байт | Область значений |
---|---|---|
byte | 1 | -128 .. 127 |
short | 2 | -32.768 .. 32.767 |
int | 4 | -2.147.483.648 .. 2.147.483.647 |
long | 8 | -9.223.372.036.854.775.808 .. 9.223.372.036.854.775.807 (примерно 1019) |
char | 2 | '\u0000' .. '\uffff', или 0 .. 65.535 |
, считаются в языке Java переменными со знаком.
Целочисленные константы могут задаваться в программе одним из трех способов: в виде десятичных, шестнадцатеричных и восьмеричных значений. По умолчанию все числа интерпретируются как десятичные и относятся к типу int. Явно указать принадлежность к типу long можно, добавив в конце числа букву "l" или букву "L".
Шестнадцатеричное значение задается с помощью символов "0x" или "0X", за которым значение числа (цифры 0-9 и буквы A-F или a-f), например: 0x7FFF.
Число в восьмеричной записи должно начинаться с нуля, за которым следует одна или несколько восьмеричных цифр, например 077777.
Восьмеричные и шестнадцатеричные числа могут быть как положительными, так и отрицательными и изменяются в тех же диапазонах, что и числа в десятичном представлении (например, шестнадцатеричные числа типа byte имеют максимальное значение 0x7F и минимальное значение -0x80, а восьмеричные – соответственно 177 и -200)
Примеры объявления целых переменных:
int x = 0;
long i, j, k;
byte a1 = 0xF1, a2 = 0x07;
short r1 = 017;
Символы в Java определяются с помощью ключевого слова char и реализованы с использованием стандарта Unicode. Можно задать константу-символ в программе или как обычный символ. Символьное значение должны быть заключено в пару одиночных апострофов, например
char symbol=' f ';
Дробные (вещественные) типы
Язык Java поддерживает числа и переменные с плавающей точкой обычной и двойной разрядности –типы float и double.
Название | Длина байт | Область значений |
---|---|---|
float | 4 | 3.40282347e+38f ; 1.40239846e-45f |
double | 8 | 1.79769313486231570e+308 ; 4.94065645841246544e-324 |
Все константы с плавающей точкой подразумеваются принадлежащими к типу double. Чтобы задать число типа float, необходимо добавить в его конец символ "f" или символ "F".
Примеры объявления переменных с плавающей точкой:
float x1 = 3.5f, x2 = 3.7E6f, x3 = -1.8E-7f;
double z = 1.0;
Булев тип представлен всего одним типом boolean, который может хранить всего два возможных значения – true и false. Величины именно этого типа получаются в результате операций сравнения.
Так, результатом сравнения
5 > 3
будет «истина», а результатом сравнения
8 < 1
будет «ложь».
В отличие от C, где результату «ложь» сопоставлено целое значение типа int, равное 0, а результату «истина» – ненулевое значение типа int, и, соответственно, результатам сравнения присваивается целое значение (обычно 0 или 1), в Java для булевских переменных введен свой, отдельный тип данных.
Только булевы выражения допускаются для управления потоком вычислений, например, в качестве критерия условного перехода if.
Выражение ссылочного типа имеет значение либо null, либо ссылку, указывающую на некоторый объект в виртуальной памяти Java машины. " Определения классы, интерфейсы и массивы мы рассмотрим далее и более подробно.