- •Вступление. О книге и не только
- •Объектно-ориентированное программирование и Java
- •Часть I. Введение в Java Глава 1. Основы Java
- •Простые программы
- •Комментарии
- •Простые типы данных и литералы
- •Приведение типов
- •Основные операторы Java
- •Глава 2. Управляющие инструкции Java
- •Условная инструкция if()
- •Условная инструкция switch()
- •Инструкция цикла for()
- •Инструкция цикла while()
- •Инструкция do-while()
- •Метки и инструкции break() и continue()
Комментарии
Это мелочи. Но нет ничего важнее мелочей!
Из к/ф «Приключения Шерлока Холмса
и доктора Ватсона»
Очень часто в программном коде необходимо оставить комментарий — не- которые пояснения, напоминания или просто текст, предназначенный для
пользователя. Важно отметить, что комментарий предназначен не для компи- лятора, поэтому компилятором он игнорируется. В Java существует три типа комментариев.
Однострочный комментарий. Такой комментарий начинается с двойной косой черты (символ //). Все, что находится в строке кода справа от двойной косой черты, компилятором игнорируется.
Многострочный комментарий. Такой комментарий начинается последователь- ностью символов /* и заканчивается последовательностью символов */. Все, что находится между символами /* и */, компилятором игнорируется.
Многострочный комментарий документационной информации. Начинается последовательностью символов /** и заканчивается последовательностью символов */. Обычно используется для выделения в качестве комментария данных справочного характера.
Не следует недооценивать значения комментариев. Хороший комментарий су- щественно улучшает читабельность программного кода и позволяет избежать многих неприятностей. К сожалению, большинство программистов учатся это- му правилу на своих горьких ошибках.
Простые типы данных и литералы
Все должно быть изложено так просто, как только возможно, но не проще.
А. Энштейн
Обычно программы пишут для того, чтобы обрабатывать данные. Методы и воз- можности по обработке данных в значительной степени зависят от типа данных. Язык Java относится к строго типизованным языкам. Это означает, что любая переменная в программе относится к определенному типу данных — одному и только одному. В Java все данные можно разделить на простые и ссылочные. Ссылочные данные реализуются через иерархию классов. Простые данные — это скорее дань традиции. Забегая наперед, отметим, что для простых типов данных существуют ссылочные аналоги.
Разница между простыми и ссылочными типами на практике проявляется при передаче аргументов методам. Простые типы данных передаются по значению, ссылочные — через ссылку. Читателям, знакомым хотя бы с одним из современ- ных языков программирования, эти термины должны быть знакомы. Способы передачи аргументов методам в языке Java подробно обсуждаются в главе 4, посвященной работе с классами и объектами. Пока же заметим, что простые типы данных являются, по сути, базовыми. Именно данные этих типов будут наиболее часто использоваться в первой части книги.
В Java существует четыре группы базовых типов: для работы с целыми числами, для работы с числами в формате с плавающей точкой (действительные числа),
символы и логический тип — таким образом, всего получается восемь базовых типов. Базовые типы Java перечислены в табл. 1.1.
Таблица 1.1. Базовые (простые) типы в Java
Тип данных (название) |
Количество битов |
Пояснение |
Класс- оболочка |
byte |
8 |
Целые числа в диапазоне от –128 до 127 |
Byte |
short |
16 |
Целые числа в диапазоне от –32768 до 32767 |
Short |
int |
32 |
Целые числа в диапазоне от –2147483648 до 2147483647 |
Integer |
long |
64 |
Целые числа в диапазоне от –9223372036854775808 до 9223372036854775807 |
Long |
float |
32 |
Действительные числа. По абсолютной величине изменяются в диапазоне от 3,4 10–38 до 3,4 1038 |
Float |
double |
64 |
Действительные числа двойной точности. По абсолютной величине изменяются в диапазоне от 1,7 10–308 до 1,7 10308 |
Double |
char |
16 |
Символьный тип для представления символьных значений (букв). Диапазон значений от 0 до 65536 (каждое значение соответствует определенному символу) |
Character |
boolean |
– |
Логический тип данных. Переменная этого типа может принимать два значения: true (истина) и false (ложь) |
Boolean |
В этой же таблице приведены названия классов-оболочек для базовых типов. Классы-оболочки используются в тех случаях, когда переменную соответствую- щего типа необходимо рассматривать как объект. Далее изучим каждую группу базовых типов отдельно. В первую очередь стоит обратить внимание на цело- численные типы данных.
В Java существует четыре типа целочисленных данных: byte, short, int и long. Отличаются типы количеством битов, выделяемых для записи значения соот- ветствующего типа. Размер в битах увеличивается от 8 для типа byte до 32 для типа long (с шагом дискретности 8 бит). На практике выбор подходящего типа осуществляется в соответствии с предполагаемым диапазоном изменения зна- чения переменных. Разумеется, для надежности разумно использовать наиболее
«широкий» тип данных, однако при этом не следует забывать и о том, что си- стемные ресурсы даже самого производительного компьютера не безграничны. Для работы с действительными числами используются типы float и double. С помощью этих типов реализуется формат числа с плавающей точкой. В этом формате действительное число задается посредством двух чисел: мантиссы
и показателя степени. Заданное таким образом число равно произведению ман- тиссы на десять в соответствующей второму числу степени. Поскольку размер в битах, выделяемый для типа double, в два раза больше размера для данных типа float, тип double называют типом действительных чисел двойной точности. На практике обычно используется тип double.
Поскольку в Java для символьных данных (тип char) выделяется 16 бит, такая широта размаха позволяет охватить практически все имеющиеся и использую- щиеся на сегодня символы, включая китайские иероглифы. Этот демократизм, свойственный далеко не каждому языку программирования, является следстви- ем курса разработчиков Java на создание универсального языка программи- рования, ориентированного на работу в Интернете. Символам расширенного 8-разрядного набора ISO-Latin-1 соответствует интервал значений от 0 до 255, а интервал значений от 0 до 127 определяет стандартные символы ASCII.
Что касается логического типа boolean, то переменные этого типа могут прини- мать всего два значения: true и false. В свете этого обстоятельства говорить о раз- мере (в битах) переменной типа boolean как-то не принято. В действительности ответ на этот вопрос зависит от типа используемой виртуальной Java-машины. Как правило, логические выражения применяются в условных инструкциях при создании точек ветвления программы.
Указать тип переменной недостаточно. Переменной рано или поздно придется присвоить значение. Делается это с помощью литералов. Литерал — это посто- янное значение, предназначенное для восприятия человеком, которое не может быть изменено в программе. В рассмотренном ранее примере уже использовался строчный литерал — фраза "Мы программируем на Java!". Читатель, вероятно, не удивится, узнав, что целочисленные литералы вводятся с помощью арабских цифр от 0 до 9. Также вводятся действительные числа. При этом в качестве десятичного разделителя используется точка. Символы вводятся в одинарных кавычках (не путать с текстом, который заключается в двойные кавычки!), а для ввода логических значений указывают ключевые слова true и false.
Что касается непосредственно объявления переменных в Java, то выполняется оно по следующим правилам. В первую очередь при объявлении переменной перед ее именем в обязательном порядке указывается идентификатор типа. На- пример, инструкцией int n объявляется переменная n целочисленного типа int. Впоследствии этой переменной может быть присвоено значение. В качестве оператора присваивания в Java используется оператор =. Следующими коман- дами объявляется целочисленная переменная, после чего ей присваивается зна- чение 12:
int n; n=12;
При этом всю означенную конструкцию из двух команд можно объединить в одну инструкцию вида int n=12. Более того, объявлять и инициализировать можно сразу несколько переменных, которые перечисляются через запятую
после идентификатора типа. Сразу при объявлении переменной допускается присваивать ей начальное значение, как показано далее:
long n, m;
int x, y=3, z=5; char sym='a';
В приведенном фрагменте первой инструкцией объявляются две целочислен- ные переменные типа long, после чего следующей командой объявляются три пере- менных типа int, причем для двух из них указано начальное значение. Третьей ко- мандой инициализируется символьная переменная sym со значением a (символы- значения заключаются в одинарные кавычки). Что касается доступности перемен- ных, то она определяется блоком, в котором эта переменная объявлена. Блок, в свою очередь, выделяется парой фигурных скобок (то есть { и }).
Инструкции объявления и инициализации переменных могут размещаться в лю- бом месте программы. Самое главное, чтобы переменная в программе исполь- зовалась (вызывалась) после того, как эта переменная инициализирована (ей присвоено значение). Пример программы, в которой применяются переменные разных типов и литералы, приведен в листинге 1.2.
Листинг 1.2. Переменные и литералы
class VarDemo{
public static void main(String[] args){
// Инициализация переменных: byte age=34;
char sex='м';
double weight=103.6; int height=182;
// Вывод данных:
System.out.println("Персональные данные пользователя:"); System.out.println("Возраст: "+age+" лет"); System.out.println("Пол (м/ж): "+sex+"."); System.out.println("Вес: "+weight+" кг"); System.out.println("Рост: "+height+" см");
}
}
Результат выполнения этой программы:
Персональные данные пользователя: Возраст: 34 лет
Пол (м/ж): м. Вес: 103.6 кг
Рост: 182 см
В программе объявлено с одновременной инициализацией несколько перемен- ных разных типов. Переменные предназначены для хранения персональных данных пользователя (таких как возраст, рост, вес и пол). Выражения в правой
Приведение типов 23
части от операторов присваивания (присваиваемые переменным значения) яв- ляются примерами литералов.
Числовые литералы, кроме обычного десятичного представления, могут быть записаны в восьмеричной и шестнадцатеричной системах счисления. Восьме- ричные литералы начинаются с нуля. Следующие цифры в позиционной записи восьмеричного литерала могут принимать значения в диапазоне от 0 до 7 вклю- чительно. Например, восьмеричный литерал 012 означает десятичное число 10. Шестнадцатеричные литералы начинаются с префикса 0x. Для позиционного представления шестнадцатеричного числа используются цифры от 0 до 9 и бук- вы от А до F. Например, шестнадцатеричный литерал 0x12 означает десятичное число 18.
Наконец, в формате '\xxx' задаются восьмеричные символы Unicode, а в форма- те '\uxxx' — шестнадцатеричные (символами x обозначены позиции кода).
