>a = 42
>b = 2
>c = 99
>d = 0
>a/b = 21
>c/d = 0
4.6. Приоритеты операторов
В Java действует определенный порядок, или приоритет, операций. В элементарной алгебре умножение и деление имеют более высокий приоритет, чем сложение и вычитание. В программировании также приходится следить за приоритетами операций. В таблице 4.7. указаны в порядке убывания приоритеты всех операций языка Java.
Таблица 4.7. Таблица приоритетов всех операций
№ | Высший |
1 |
>( ) [] •
|
2 | ~ ! |
3 | >* / %
|
4 | >+ -
|
5 | >>> >>> <<
|
6 | >> >= < <=
|
7 | >== !=
|
8 | & |
9 | ^ |
10 | | |
11 | && |
12 | || |
13 | ? : |
14 | >= op=
|
| Низший |
В первой строке таблицы приведены три необычных оператора, о которых мы пока не говорили. Круглые скобки () используются для явной установки приоритета. Квадратные скобки [] используются для индексирования переменной-массива. Оператор . (точка) используется для выделения элементов из ссылки на объект.
5. УПРАВЛЕНИЕ ВЫПОЛНЕНИЕМ ПРОГРАММЫ
Управление выполнением (flow control) позволяет изменять последовательность выполнения фрагментов программы, выбирая в зависимости от состояния данных ту или иную ветвь кода. Ветвление, циклы и вызовы подпрограмм - это разновидности управления выполнением программы. Все наши программы до сих пор были полностью линейны - операторы выполнялись строго по порядку, один за другим. В более сложных программах часто требуется, чтобы в зависимости от условий выполнялись одни операторы, а другие при этом пропускались. Для управления выполнением программного кода в Java имеется несколько возможностей, основанных на использовании условных операторов.
5.1. Условный оператор if-else
Конструкция 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.
5.2. Опреатор break
Оператор 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");