В Java действует определенный порядок, или приоритет, операций. В элементарной алгебре умножение и деление имеют более высокий приоритет, чем сложение и вычитание. В программировании также приходится следить за приоритетами операций. В таблице 4.7. указаны в порядке убывания приоритеты всех операций языка Java.
Таблица 4.7. Таблица приоритетов всех операций
№ | Высший |
1 |
|
2 | ~ ! |
3 |
|
4 |
|
5 |
|
6 |
|
7 |
|
8 | & |
9 | ^ |
10 | | |
11 | && |
12 | || |
13 | ? : |
14 |
|
| Низший |
В первой строке таблицы приведены три необычных оператора, о которых мы пока не говорили. Круглые скобки () используются для явной установки приоритета. Квадратные скобки [] используются для индексирования переменной-массива. Оператор . (точка) используется для выделения элементов из ссылки на объект.
5. УПРАВЛЕНИЕ ВЫПОЛНЕНИЕМ ПРОГРАММЫ
Управление выполнением (flow control) позволяет изменять последовательность выполнения фрагментов программы, выбирая в зависимости от состояния данных ту или иную ветвь кода. Ветвление, циклы и вызовы подпрограмм - это разновидности управления выполнением программы. Все наши программы до сих пор были полностью линейны - операторы выполнялись строго по порядку, один за другим. В более сложных программах часто требуется, чтобы в зависимости от условий выполнялись одни операторы, а другие при этом пропускались. Для управления выполнением программного кода в Java имеется несколько возможностей, основанных на использовании условных операторов.
Конструкция if-else позволяет в зависимости от некоторого логического значения выполнять различные части программного кода. В обобщенной форме этот оператор записывается следующим образом:
if (логическое выражение) оператор 1; [else оператор2;]
Раздел else необязателен. На месте любого из операторов может стоять составной оператор, заключенный в фигурные скобки. Логическое выражение это любое выражение, возвращающее значение типа boolean. Это может быть и простая переменная типа boolean.
int bytesAvailable;
//...
if (bytesAvailable > 0) {
ProcessData(); //Обработка данных
bytesAvailable -= n;
}
else
waitForMoreData(); //Ждать данные
В качестве логического выражения можно использовать выражение с операторами отношения. Это позволяет выбирать ту или иную ветвь кода в зависимости от результатов сравнения. А вот полная программа, в которой для определения, к какому времени года относится тот или иной месяц, используются операторы if-else.
class IfElse {
public static void main(String args[]) {
int month = 4;
String season;
if (month == 12 || month == 1 || month == 2)
{
season = "Winter";
}
else if (month ==3 || month == 4 || month == 5)
{
season = "Spring";
}
else if (month == 6 || month == 7 || month == 8)
{
season = "Summer";
}
else if (month == 9 || month == 10 || month == 11)
{
season = "Autumn";
}
else
{
season = "Bogus Month";
}
System.out.println( "April is in the " + season + ".");
}
}
После выполнения программы вы должны получить следующий результат:
April is in the Spring.
Оператор break сообщает исполняющей среде, что следует прекратить выполнение именованного блока и передать управление оператору, следующему за данным блоком. Для именования блоков в языке Java используются метки. Оператор break при работе с циклами и в операторах switch может использоваться без метки. В таком случае подразумевается выход из текущего блока. Для именования блока перед ним помещается метка, состоящая из идентификатора и следующего за ним двоеточия. После объявления метки на нее можно ссылаться в операторе break. При этом управление передается оператору, расположенному за поименованным блоком.
Например, в следующей программе имеется три вложенных блока, и у каждого своя уникальная метка. Оператор break, стоящий во внутреннем блоке, вызывает переход на оператор, следующий за блоком Ь. При этом пропускаются два оператора println.
class Break {
public static void main(String args[]) {
boolean t = true;
a: {
b: {
c: {
System.out.println("ITepefl break");
if(t) break b;