Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Скачиваний:
49
Добавлен:
12.05.2015
Размер:
1.82 Mб
Скачать

Глава 3

Типы данных, переменные и массивы

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

Java — язык со строгой типизацией

Важно заявить в начале, что Java — это язык со строгой типизацией. Дейст­вительно, часть безопасности и устойчивости к ошибкам Java исходит из этого факта. Давайте разберемся, что это означает. Во-первых, каждая пере­менная и каждое выражение имеют тип, и каждый тип строго определен. Во-вторых, все назначения — явные или через передачу параметров в вызо­вах методов, проверяются на совместимость типов. Не имеется никаких ав­томатических приведений или преобразований конфликтующих типов, как в некоторых языках. Компилятор Java проверяет все выражения и парамет­ры, чтобы гарантировать, что типы совместимы. Любые несоответствия ти­пов — ошибки, которые должны быть исправлены прежде, чем компилятор закончит компилировать класс.

Если вы переходите к Java от С или C++, имейте в виду, что Java более строго типизирован, чем любой язык. Например, в C/C++ можно присвоить значение с плавающей точкой целому числу. В Java — нельзя. В С также нет обязатель­но строгого контроля соответствия типов между параметром и аргументом функции. В Java — есть. Сначала вы могли бы найти строгую проверку соот­ветствия типов в Java немного утомительной. Но помните, в конечном счете это поможет уменьшить возможность ошибок в вашем коде.

Глава 3. Типы данных, переменные и массивы 53

Простые типы

Java определяет восемь простых (или элементных) типов данных: byte,

short, int, long, char, float, double И boolean. Их МОЖНО объединить В че-тыре группы.

О Целые (Integers). Эта группа включает типы byte, short, int и long, ко­торые являются полнозначными целыми числами со знаком.

О Числа с плавающей точкой (Floating-point number). Эта группа включает типы float и double, которые представляют числа с дробной точностью.

О Символы (Characters). Эта группа включает тип char, который представ­ляет символы в наборе символов, подобные буквам и цифрам.

О Логические или булевские (Boolean). Эта группа включает тип boolean, ко­торый является специальным типом для представления значений

true/false (истина/ложь).

Вы можете использовать указанные типы сами по себе, создавать массивы или ваши собственные классы типов. Таким образом, они формируют осно­ву для всех других типов данных, которые вы можете создавать.

Простые типы представляют одиночные (не множественные) значения. Хотя Java во всем остальном полностью объектно-ориентирован, простые типы не являются таковыми. Они аналогичны простым типам, которые можно найти в большинстве других не объектно-ориентированных языков. Причи­на этого кроется в эффективности. Выполнение простых типов в виде объ­ектов слишком ухудшило бы эффективность.

Простые типы определены так, чтобы знать их явный диапазон и математи­ческое поведение. Языки типа С и C++ позволяют значению целого числа изменяться, основываясь на диктате среды выполнения. Однако Java — другой язык. Из-за требования мобильности, все типы данных имеют строго определенный диапазон. Например, int — всегда 32-битный, независимо от специфической платформы. Это позволяет программам быть записанными так, чтобы гарантировать ее выполнение без перевода на любой машинной архитектуре. Тогда как строгая спецификация размера целого числа может вызывать небольшую потерю производительности, в некоторых средах это необходимо, чтобы достичь мобильности.

Рассмотрим каждый тип данных отдельно.

Целые типы

Java определяет четыре целых типа: byte, short, int и long. Все они со знаками — положительные и отрицательные значения. Java не поддерживает беззнаковых и только положительных целых. (Однако существуют машин-

54 Часть I. Язык Java

ные языки, включая C/C++, поддерживающие целые числа как со знаком, так и без знака.) Не смотря на это, проектировщики Java чувствовали, что целые числа без знака все-таки ненужны. В частности, что концепция целых без знака (unsigned) использовалась главным образом, чтобы специфициро­вать поведение старшего бита, который определял знак целого типа (int), когда он выражен как число. Как вы увидите в главе 4, Java управляет зна­чением старшего бита иначе, предоставляя специальную операцию "беззна­кового правого сдвига". Таким образом, потребность в типе целого числа без знака была устранена.

О ширине (или количестве бит, отводимых для хранения значения) целочис­ленного типа нельзя думать как о количестве памяти, которую он занимает, а скорее, как о поведении, которое она определяет для переменных и выра­жений этого типа. Исполнительная среда Java вольна использовать любой размер, какой она хочет, тогда как типы ведут себя согласно их объявлению. Существует, по крайней мере, одна реализация исполнительной среды, ко­торая хранит числа типа byte и short как 32-разрядные (а не 8- и 16-раз­рядные) значения, чтобы улучшить эффективность, потому что этим зна­чением выражается размер слова большинства используемых в настоящее время компьютеров.

Ширина и диапазоны этих целых типов широко изменяются, как показано в табл. 3.1.

Таблица 3.1. Ширина и диапазоны целых типов данных

Имя

Ширина

Диапазон

long

64

от -9,223,372,036,854,775,808 до 9,223,372,036

,854,775,807

int

32

от -2,147,483,648 до 2,147,483,647

short

16

от -32,768 до 32,767

byte

8

от -128 до 127

Рассмотрим каждый тип целого числа.

Тип byte

Тип byte — самый маленький целый тип. Это 8-разрядный тип со знаком, значения которого изменяются в диапазоне от -128 до 127. Переменные типа byte особенно полезны, когда вы работаете с сетевым или файловым потоком данных. Они также могут использоваться при работе с рядами дво­ичных данных, которые не могут быть непосредственно совместимы с дру­гими встроенными типами Java.

Соседние файлы в папке JavaLit