программирование :: java

Учим Java. Объектно-ориентированное программирование и основные синтаксические конструкции (часть 2)


Учим Java. Объектно-ориентированное программирование
и основные синтаксические конструкции (часть 2)
Познакомившись с основными типами в Java, мы не рассмотрели операторы языка. Они практически ничем не отличаются от операторов C. Однако это будет полезно тем, кто хочет изучить Java, не зная при этом C. Помимо простых операторов, мы постараемся затронуть условный оператор if и некоторые конструкции для организации циклов в Java.

В Java, как и в любом нормальном языке программирования, имеется множество операторов: арифметические операторы (+,-,*,/ и т.д.), логические операторы (and, or, not и т.д.), операторы сравнения (<,> ,==,<= и т.д.) и битовые (> > , << и т.д.).
Арифметические операторы используются для вычислений. Помимо банальных бинарных операторов сложения, вычитания, умножения и деления, в Java, ровно как и в C, существует несколько простых и в то же время важных и полезных операторов. К таковым относятся операции инкремента и декремента. Иначе говоря, унарные операторы для увеличения чего-либо на единицу или уменьшения.

int a = 1;
boolean b = true;
a++;
b--;
System.out.println(a); // инкремент (a = a +1)
System.out.println(b); // декремент (b = false)

В вышеописанном примере мы использовали постфиксные операторы ин(де)кремента. Это означает, что если бы мы попытались выполнить вывод результата при помощи, например, System.out.println(a++), то на экран было бы выведено a равное 1. Т.е. постфиксный оператор означает, что сперва мы возвращаем значение и только после этого увеличиваем/уменьшаем значение. Ежели надо выполнить наоборот, следует использовать префиксную запись:

System.out.println(++a);
System.out.println(--b);
Заметим также, что n-ый инкремент мы можем записывать последовательностью знаков +, вот так:

a++++; // a ++; a++;
a------; // a--; a--; a--;

Это что касается инкрементов/декрементов.
Для деления по модулю в Java был введен бинарный оператор %. В Паскале для этих целей используется оператор mod.
Следующая группа операторов в Java — это сложение с предварительным действием. Это очень приятное и удобное дополнение, пришедшее из C. Рассмотрим пример:

int a = 4;
String abc = "Hello";
abc += " World!"; // abc = abc + " World!";
a += 2; // a = a + 2;
a -= 3; // a = a — 3;

В комментариях описан смысл этих операторов. Кроме +=, -=, имеются также *=, /= и %=. Думаю, все понятно. Весьма полезная вещь. Я уверен, вы найдете ей применение в своих программах.
Логические операторы выполняются только с операндами булевского типа. Перечислю основные из них:
& — логическое И
| — логическое ИЛИ
^ — исключающее ИЛИ
|| — ИЛИ (OR)
&& — И (AND)
! — отрицание НЕ (NOT)
== — равно
!= — не равно
? : — тернарный оператор
Тернарный (три операнда) оператор ?: (if-then-else) используется как возможность обойтись без лишних условных конструкций if. Например:

int b = 1;
boolean a = (b < 2) ? true : false; // a = true, т.к. (b < 2) — верно

В общем виде оператор выглядит так: (выражение1) ? выражение2 : выражение3;
Из операторов сравнения имеются:
< — меньше
> — больше
<= — меньше либо равно
> = — больше либо равно
== — равно
!= — не равно

В операторе равно (==) используется два символа = не случайно. Дело в том, что одиночный символ означает оператор присваивания.
Осталось разобрать битовые операторы. Они встречаются в основном в весьма специфичных задачах, однако многие любят использовать их для вычислений вместо арифметических операторов. Это особенно важно, например, в графических приложениях, ведь на выполнение бинарных операторов процессор затрачивает намного меньше тиков, чем на обычные арифметические операторы.
Я не думаю, что стоит останавливаться и досконально расписывать, как использовать тот или иной битовый оператор. Тем более, что это можно найти в любой книге по программированию. Ограничимся простым перечислением с комментариями.
~ — побитовое унарное отрицание
& — побитовое И
| — побитовое ИЛИ
^ — побитовое исключающее ИЛИ
> > — сдвиг вправо
<< — сдвиг влево
> > > — сдвиг вправо с заполнением нулями
&= — побитовое И с присваиванием
|= — побитовое ИЛИ с присваиванием
^= — побитовое исключающее ИЛИ с присваиванием
> > = — сдвиг вправо с присваиванием
> > > = — сдвиг вправо с заполнением нулями с присваиванием
<<= — сдвиг влево с присваиванием
На этом можно завершить знакомство с операторами Java.
Условный оператор и конструкции для организации циклов, я думаю, вам должны быть хорошо знакомы, если вы когда-либо программировали на каком-нибудь языке программирования. Особенно если это был C. Вкратце обо всем.
Условный оператор if используется для выполнения какого-то действия по условию, где в качестве условия выступает выражение, возвращающее значение булевского типа. Вот как он выглядит в общем виде:

if (условие) выражение; [else выражение;]

Если необходимо выполнить несколько действий, то при помощи фигурных скобок выделяется блок кода, например:
int a = 1;
if (a == 1) System.out.println("a == 1: true");
if (a == 1)
{
a++;
System.out.println("a == 1: true");
}
else System.out.println("a == 1: false");

В Java отсутствуют такие расширения условного оператора, как elseif. Она легко заменяется при помощи отдельных if и else.
Помимо обычного условного оператора, в Java есть оператор switch, пришедший из C. Он не очень распространен среди программистов по ряду причин, но знать его структуру необходимо в любом случае:

switch (переменная)
{
case значение1 : выражение1;
case значение2 : выражение2;
default : действие по умолчанию;
}

Если необходимо выполнить несколько действий, то без фигурных скобок через точку с запятой идут операции и последним оператором должен выступить оператор выхода из цикла break.
Для организации циклов существует ряд конструкций. Первая — это while:

while (условие) действие;
Думаю, уже понятно, что для выполнения нескольких действий просто заключаем операторы в фигурные скобки. Действие(я) будет выполняться, если условие истинно.
Аналогичный цикл do … while:

do действие while (условие);

Различие в том, что данный цикл сперва выполняет действие, а после этого проверяется условие дальнейшей итерации цикла. Т.е. вне зависимости от условия действие выполняется как минимум один раз.
Выше речь шла об условных циклах. Для того чтобы заставить эти циклы выполнять определенное количество итераций, необходимо вводить дополнительную переменную-счетчик.
Для этих целей как нельзя лучше подходит цикл for:

for (инициализация_счетчика;условие;действие_над_счетчиком) действие;

Например:

for (i = 0;i<10;i++)
{
System.out.println("Counter i = ",i);
i-; // здесь ничего не происходит
}

Важно знать, что мы не можем изменить значение счетчика внутри цикла. Это просто не приведет ни к чему, т.к. сам счетчик инициализируется один раз в начале цикла. Приведенный выше пример можно описать словами: выполнять действия в блоке, пока (i<10) == true, начальное значение счетчика 0 и при каждой итерации выполняем инкремент счетчика. Как результат, получаем 10 выведенных строчек на экран.
На этом знакомство с операциями, циклами и условными операторами можно завершить и продолжить изучение Java изучением более весомых вещей.
Жду ваших писем с вопросами и предложениями.

Алексей Литвинюк, litvinuke@tut.by




© компьютерная газета