Операторы управления потоком Java

Когда программа Java выполняется, она выполняется оператор за оператором. Как правило, все операторы выполняются последовательно сверху вниз. Иногда, чтобы применить бизнес-логику, нам может потребоваться выполнить операторы условно, на основе результата оценки выражения.

В Java операторы управления потоком помогают в условном выполнении определенных операторов. Все операторы управления потоком связаны с бизнес-условием — когда true, блок кода выполняется; когда false, он пропускается.

В Java оператор потока управления может быть одним из следующих:

1. Заявление о выборе

Операторы выбора основаны на оценке выражения. Если оценка истинна, то выполняется блок, в противном случае выполняется другой блок.

1.1. Оператор if-else

Оператор if-else сообщает программе, что необходимо выполнить определенный раздел кода только в том случае, если конкретный тест дает значение true, в противном случае выполняется блок else.

boolean condition = true;if(condition) {System.out.println("Condition is true"); //This statement is executed} else {System.out.println("Condition is false");}

Мы можем иметь вложенные блоки if-else.

int i = 5;if(i < 0) {System.out.println("Value of 'i' is Negative.");} else if(i > 0 && i < 100) {System.out.println("Value of 'i' is Less Than 100."); //This statement is executed} else {System.out.println("Value of 'i' is Greater Than 100.");}

1.2. switch…case оператор

Так как оператор if-else сообщает программе о необходимости выполнения определенного раздела кода только в том случае, если конкретный тест даст значение true или false, оператор switch может иметь несколько путей выполнения.

Оператор switch…case разветвляет поток выполнения на основе значения переменной. Оператор break позволяет оператору switch…case выполняться правильно, иначе будут выполнены все случаи.

Switch работает с примитивными типами данных byte, short, char и int. Он также работает с перечислимыми типами, String и классами-оболочками.

String value = "B";switch(value){case "A":System.out.println("Value is A");break;case "B":System.out.println("Value is B"); //This case is executedbreak;default:System.out.println("Value is neither A nor B");}

Начиная с Java 14, мы можем записать приведенный выше оператор switch менее многословным образом.

String value = "B";switch(value) {case "A" -> System.out.println("Value is A");case "B" -> System.out.println("Value is B");default -> System.out.println("Value is neither A nor B");}

2. Итеративное утверждение

2.1. Цикл while

Оператор цикла while непрерывно выполняет блок операторов, пока определенное условие истинно. Оператор while продолжает проверять выражение и выполнять блок, пока выражение не станет ложным.

int count = 1;while(count < 5){System.out.println("Count is: " + count); // 1 2 3 4 5count++;}

2.2. Цикл do-while

Разница между операторами do-while и while заключается в том, что do-while оценивает свое выражение в нижней части цикла, а не в верхней. Поэтому операторы внутри блока do всегда выполняются по крайней мере один раз.

Обратите внимание, что оператор do-while заканчивается точкой с запятой. Условное выражение должно быть булевым выражением.

int i = 1;int sum = 0;do{sum = sum + i;i++;}while(i <= 10);

2.3. для цикла

Оператор цикла for многократно повторяется в диапазоне значений до тех пор, пока не будет выполнено определенное условие.

for(int num = 1; num <= 5; num++) {//statements}

В Java 5 появился цикл foreach, который называется расширенным циклом for-each. Он используется для итерации по элементам массивов и коллекций.

int[] numList = {10, 20, 30, 40};for(int num : numList){System.out.println(num);}

3. Заявление об обработке исключений

В Java классы исключений используются для представления событий, которые нарушают нормальный поток выполнения. Их имена обычно заканчиваются на Exception – например, NullPointerException или IOException.

Экземпляры исключений могут быть сгенерированы(выброшены) либо автоматически JVM, либо кодом приложения с использованием ключевого слова throw. Конструкции try-catch или try-catch-finally используются для захвата объекта выброшенного исключения и перенаправления потока выполнения в другую ветвь кода. Если выброшенное исключение не перехвачено, оно распространяется на всю JVM и заставляет ее выйти.

3.1. Оператор try-catch-finally

Объект исключения, выброшенный из блока try, захватывается в соответствующем блоке catch. Код в блоке finally всегда выполняется и обычно содержит код для освобождения дорогостоящих ресурсов, удерживаемых кодом приложения.

try {//open file//read file}catch(Exception e) {//handle exception while reading the file}finally {//close the file}

3.2 заявление о выбросе

Оператор throw используется для ручного создания объекта исключения из кода приложения.

try{throw new NullPointerException("Null occurred");}catch(Exception e){System.out.println("catch block");} 

4. Оператор ветвления

Операторы ветвления позволяют прерывать текущий поток выполнения и продолжать выполнение с начала блока, конца блока или определенной(помеченной) точки потока управления.

4.1. заявление о перерыве

Ключевое слово break используется для завершения циклов for, while или do-while. Его также можно использовать для завершения оператора switch, как показано в предыдущих разделах.

for(...){//loop statementsif(conditional-expression)break;}

4.2. продолжить заявление

Оператор continue может использоваться только внутри циклов for, while и do-while. Оператор continue пропускает операторы после себя и начинает новую итерацию в цикле.

for( int i = 0 ; i < 10 ; i++ ) {if( i % 2 == 0) {continue; //if i is even, skip the print statement}System.out.println("The number is " + i );}

4.3. Маркированное заявление

Всякий раз, когда во время выполнения программы встречается помеченный оператор break, управление немедленно выходит из охватывающего помеченного блока. Аналогично, помеченный continue вернет управление в начало.

Помеченные операторы аналогичны операторам break и continue, но блокам даны дополнительные имена.

hackit:while(Some condition){if( a specific condition )break hackit; //labelelse//normal business logic goes here..}

4.4. Ключевое слово yield

yield добавлен в Java 14 и используется внутри выражений switch. Оператор yield передает управление, заставляя включающее выражение switch выдавать указанное значение.

SwitchExpression:YieldStatement:yield Expression;

Давайте разберемся на простом примере. В следующем примере выражение switch возвращает логическое значение. Значение true, если это будний день, в противном случае значение false.

Boolean result = switch(day){case MON, TUE, WED, THUR, FRI ->{System.out.println("It is WeekDay");yield true;}case SAT, SUN ->{System.out.println("It is Weekend");yield false;}};System.out.println("Result is " + result);

5. Заключение

В этом уроке мы изучили операторы потока управления, доступные в Java для управления выполнением программы. Мы узнали, как оценка условного выражения определяет, какой блок будет выполнен на основе результата оценки.

Прокрутить вверх