Глава 5.3. Типы, значения и переменные5.3.1. Основные понятияJava строготипизованный язык. Это означает, что каждая переменная и каждое выражение Java должно иметь тип, определенный уже на этапе компиляции. Каждый тип имеет определенный диапазон значений и определяет набор применимых к нему операций и их смысл. Строгая типизация помогает обнаруживать ошибки в программе на этапе компиляции. Все типы в Java подразделяются на примитивные и ссылочные. Примитивными являются логический тип boolean, целые числовые типы byte, short, int, long, char и плавающие числовые типы float и double. К ссылочным типам относятся классы, интерфейсы и массивы. Существует также специальный нулевой тип. Объект в Java это или динамически созданный экземпляр класса, или динамический созданный массив. Значениями ссылочного типа являются ссылки на объекты. Все объекты, включая массивы, наследуют методы класса Object. Строки представляются объектами класса String. Переменная это именованное хранилище данных определенного типа. Точнее говоря:
5.3.2. Примитивные типы5.3.2.1. Тип booleanТип boolean состоит из двух логических констант: true (истина) и false (ложь). Логическое значение может быть приведено к типу boolean, другие неявные приведения к данному типу в Java отсутствуют. Логическое значение может быть преобразовано в строку по правилу неявного преобразования строк. Пример декларации логической переменной: boolean b; 5.3.2.2. Целые числовые типыЗначения целых числовых типов лежат в следующих диапазонах.
Если хотя бы один из операндов имеет тип long, то второй операнд также приводится к этому типу, и результат операции будет иметь тип long (исключением являются операции сдвига). В остальных случаях все операнды приводятся к типу int, и результат операции также имеет тип int. Любое значение целого типа может быть приведено к любому числовому типу. Неявные приведения целых числовых типов к типу boolean и наоборот в Java отсутствуют. Примеры деклараций целых переменных: byte b; short s; int i; long l; char c; 5.3.2.3. Плавающие числовые типыJava содержит два плавающих типа float и double, которые соответствуют 32-битовой и 64-битовой реализациям формата IEEE 754. Эти типы содержат следующие специальные значения: "Не число" Float.NaN и Double.NaN, положительная бесконечность +Infinity (или просто Inifinity) и отрицательная бесконечность -Infinity. Отметим также, что в данном формате различаются положительный нуль (+0 или 0) и отрицательный нуль (-0). Значение NaN имеет ту особенность, что оно не равно никакому числовому значению, включая самого себя. Если хотя бы один из операндов имеет тип double, то второй операнд также приводится к этому типу, и результат операции будет иметь тип double. В остальных случаях все операнды приводятся к типу float, и результат операции также имеет тип float. Любое значение плавающего типа может быть приведено к любому числовому типу. Неявные приведения плавающих числовых типов к типу boolean и наоборот в Java отсутствуют. Примеры деклараций плавающих переменных: float f; double d; 5.3.3. Ссылочные типыКак было указано выше, к ссылочным типам относятся классы, интерфейсы и массивы. В следующем примере class Point { int[] metrics; } interface Move { void move(int deltax, int deltay); } объявлены класс Point, содержащий массив metrics, и интерфейс Move, содержащий метод move. Два ссылочных типа считаются одинаковыми, если:
5.3.3.1. ОбъектыОбъект это либо экземпляр класса, либо массив. Значениями ссылочного типа служат ссылки на объекты, которые часто называются также указателями. Специальным ссылочным значением является нулевая ссылка, которая не указывает ни на какой объект. Способы создания экземпляров классов описаны в гл. 5.7, а массивов в гл. 5.9. Помните, что на один объект может указывать любое количество ссылок. Если две переменные указывают на один объект, то состояние объекта может быть изменено через первую ссылку, а затем прочитано через вторую. 5.3.3.2. Класс ObjectСтандартный класс Object является предком всех остальных классов Java, которые наследуют его методы. Подробно эти методы описаны в гл. 5.14. 5.3.3.3. Класс StringЭкземплярами класса String являются текстовые строки, т. е. цепочки символов Unicode. Объект класса String имеет постоянное (неизменяемое) значение. Строковые константы являются ссылками на экземпляры класса String. Оператор конкатенации строк неявно создает новый объект класса String. 5.3.4. ПеременныеПеременная это хранилище данных определенного типа, обычно имеющее уникальное имя. Переменная всегда содержит значение, которое совместимо по присваиванию с ее типом. Значение переменной изменяется операцией присваивания или операциями префиксного/постфиксного инкремента/декремента. 5.3.4.1. Виды переменныхВ Java существуют семь разновидностей переменных:
Следующий пример содержит декларации нескольких переменных перечисленных разновидностей: class Point { static int numPoints; // numPoints - переменная класса int x, y; // x и y - переменные реализации int[] w = new int[10]; // w - массив целых чисел, w[0] - элемент массива int setX(int x) { // x - параметр метода int oldx = this.x; // oldx - локальная переменная this.x = x; return oldx; } } 5.3.4.2. Начальные значения переменныхПеред тем, как к переменной можно будет обращаться, ей должно быть присвоено значение. При этом
|