
- •Глава 2
- •Глава 2. Обзор языка Java 31_
- •Глава 2. Обзор языка Java
- •Глава 2. Обзор языка Java 37
- •Глава 2. Обзор языка Java 39
- •Глава 2. Обзор языка Java 41
- •Часть I. Язык Java
- •Глава 2. Обзор языка Java 43_
- •Глава 2. Обзор языка Java 45_
- •Глава 2. Обзор языка Java 47
- •Глава 2. Обзор языка Java 49_
- •Часть I. Язык Java
- •Глава 2. Обзор языка Java 57
- •Глава 3
- •Глава 3. Типы данных, переменные и массивы 53
- •Глава 3. Типы данных, переменные и массивы _ 55
- •Глава 3. Типы данных, переменные и массивы
- •Глава 3. Типы данных, переменные и массивы 59_
- •Глава 3. Типы данных, переменные и массивы 61_
- •Глава 3. Типы данных, переменные и массивы
- •Глава 3. Типы данных, переменные и массивы 65_
- •Часть I. Язык Java
- •Глава 3. Типы данных, переменные и массивы 67_
- •Часть I. Язык Java
- •Глава 3. Типы данных, переменные и массивы 69_
- •Глава 3. Типы данных, переменные и массивы 71_
- •Глава 3. Типы данных, переменные и массивы 73_
- •Глава 3. Типы данных, переменные и массивы
- •Часть I. Язык Java
- •Глава 3. Типы данных, переменные и массивы _ 77_ Эта программа генерирует следующий вывод:
- •Глава 3. Типы данных, переменные и массивы 79
- •Часть I. Язык Java
- •Глава 3. Типы данных, переменные и массивы 81_
- •Глава 4
- •Глава 4. Операции 83
- •84 Часть I. Язык Java
- •Глава 4. Операции 85_
- •Глава 4. Операции 87_
- •88_ Часть I. Язык Java
- •Глава 4. Операции 89
- •Глава 4. Операции 91_
- •Глава 4. Операции 93_
- •Глава 4. Операции 95_
- •Глава 4. Операции 97_
- •Глава 4. Операции 99
- •Глава 4. Операции 101
- •Глава 4. Операции 103
- •104 Часть I, Язык Java
- •Глава 4. Операции 105
- •Глава 5
- •Глава 5, Управляющие операторы 107
- •Глава 5. Управляющие операторы 109
- •110 Часть I. Язык Java
- •Глава 5, Управляющие операторы 111
- •Глава 5. Управляющие операторы 113
- •Глава 5. Управляющие операторы
- •Глава 5. Управляющие операторы 117
- •118 Часть I. Язык Java
- •Глава 5. Управляющие операторы 119
- •Глава 5. Управляющие операторы 121
- •122 Часть I. Язык Java
- •Глава 5. Управляющие операторы 123
- •Глава 5. Управляющие операторы 125
- •Глава 5. Управляющие операторы 127
- •Глава 5. Управляющие операторы 129
- •Глава 5. Управляющие операторы
- •Глава 6
- •134 Часть I. Язык Java
- •Глава 6. Введение в классы 135
- •136 Часть I. Язык Java
- •Глава 6. Введение в классы _ 137
- •Глава 6. Введение в классы 139
- •Глава 6. Введение в классы
- •Глава 6. Введение в классы 143
- •Глава 6. Введение в классы 145
- •Глава 6. Введение в классы 147
- •Глава 6. Введение в классы 149
- •Глава 6. Введение в классы 151
- •154 Часть I. Язык Java
- •Глава 6. Введение в классы 155
- •Глава 6. Введение в классы 157
- •Глава 7
- •Глава 7. Методы и классы 159
- •Глава 7. Методы и классы . 161
- •Глава 7. Методы и классы • 163
- •164 Часть I. Язык Java
- •Глава 7. Методы и классы 165
- •Глава 7. Методы и классы 167
- •Глава 7. Методы и классы 169
- •Глава 7, Методы и классы 171-
- •Глава 7. Методы и классы 173
- •Глава 7. Методы и классы 775
- •Глава 7. Методы и классы 177
- •Глава 7. Методы и классы ' 179
- •Глава 7. Методы и классы 1_81_
- •Глава 7. Методы и классы 1_83
- •184 '• Часть I. Язык Java
- •Глава 7. Методы и классы . 185
- •Глава 7. Методы и классы 187
- •Глава 8
- •Глава 8. Наследование 191
- •Глава 8. Наследование 193
- •Глава 8, Наследование 195
- •Глава 8. Наследование 197
- •198 Часть I. Язык Java
- •Глава 8, Наследование 199
- •Глава 8. Наследование 201
- •202 Часть I. Язык Java
- •Глава 8. Наследование 203
- •Глава 8. Наследование 205
- •Глава 8. Наследование 207
- •Глава 8. Наследование 209
- •Глава 8. Наследование 211
- •Глава 8. Наследование 213
- •Глава 8. Наследование 215
- •Глава 8. Наследование 217
- •Глава 12
- •Глава 12. Ввод/вывод, апплеты и другие темы 303_
- •Глава 12. Ввод/вывод, апплеты и другие темы . 305
- •Глава 12. Ввод/вывод, алплеты и другие темы 307
- •Глава 12. Ввод/вывод, апплеты и другие темы 309
- •Глава 12. Ввод/вывод, апплеты и другие темы 311
- •Глава 12. Ввод/вывод, апплаты и другие темы 313
- •314 Часть I. Язык Java
- •Глава 12. Ввод/вывод, апплеты и другие темы 315
- •Глава 12. Ввод/вывод, апплеты и другие темы 317
- •Глава 12. Ввод/вывод, апплеты и другие темы 319
- •320 Часть I. Язык Java
- •Глава 12. Ввод/вывод, апплеты и другие темы 321
- •Глава 12. Ввод/вывод, апплеты и другие темы 323
- •324 Часть I. Язык Java
- •Глава 12. Ввод/вывод, апплеты и другие темы 325
- •326 Часть I. Язык Java
- •Глава 12. Ввод/вывод, апплегы и другие темы 327
Глава 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.