Java suporta três operadores de salto Usando o operador
O operador Use
Além de ser usado em instruções switch e loops, Usando o operador
Às vezes é útil iniciar a próxima iteração de um loop mais cedo. Ou seja, você precisa continuar executando o loop, mas parar de processar o restante do código em seu corpo para esta iteração específica. Na verdade, esta é uma Operador
A última instrução de controle é
break
- continue
e return
. Eles transferem o controle para outra parte do seu programa. Vamos considerar cada um dos operadores detalhadamente.
Usando o operadorbreak
O operador break
em Java é usado em três casos. Primeiro, como você já viu, ele encerra a sequência de instruções nas ramificações de instruções switch
. Em segundo lugar, pode ser usado para sair de um loop. Em terceiro lugar, pode ser usado como uma forma "civilizada" do operador de salto incondicional goto
. Esta seção explica os dois últimos casos. Use break
para sair de um loop Usando break
, você pode forçar o encerramento imediato do loop, ignorando a expressão condicional e qualquer código restante no corpo do loop. Quando uma instrução break
é encontrada dentro de um loop, o segundo termina e o controle do programa é transferido para a instrução que o segue. Exemplo simples:
// Использование break для выхода из цикла.
public class BreakLoop {
public static void main(String[] args) {
for (int i = 0; i < 100; i++) {
if (i == 4) {
break; // завершить цикл, если i = 4
}
System.out.println("i: " + i);
}
System.out.println("Цикл завершен.");
}
}
Este programa gera a seguinte saída:
i: 0
i: 1
i: 2
i: 3
Цикл завершен.
Embora o loop for
seja projetado aqui para executar suas instruções de 0 a 99 vezes, o operador break
faz com que ele termine mais cedo quando i for 4. O operador break
pode ser usado com qualquer um dos loops de Java, incluindo loops intencionalmente infinitos. Por exemplo, abaixo está o programa anterior codificado usando um loop while
. A saída deste programa é a mesma do seu antecessor.
// Использование break для выхода из while-цикла.
public class BreakLoop2 {
public static void main(String[] args) {
int i = 0;
while (i < 100) {
if (i == 4) {
break; // закончить цикл, если i = 4
}
System.out.println("i: " + i);
i++;
}
System.out.println("Цикл завершен.");
}
}
Quando usada em um conjunto de loops aninhados, a instrução break
sairá apenas do loop mais interno. Por exemplo:
// Использование break во вложенных циклах.
public class BreakLoop3 {
public static void main(String[] args) {
for (int i = 0; i < 3; i++) {
System.out.print("Итерация " + i + ": ");
for (int j = 0; j < 10; j++) {
if (j == 4) {
break; // закончить цикл, если j = 4
}
System.out.print(j + " ");
}
System.out.println();
}
System.out.println("Цикл завершен.");
}
}
Este programa gera a seguinte saída:
Итерация 0: 0 1 2 3
Итерация 1: 0 1 2 3
Итерация 2: 0 1 2 3
Цикл завершен.
Como você pode ver, a instrução break
no loop interno faz com que apenas esse loop termine. O loop externo não é afetado. Façamos mais dois comentários a respeito break
. Primeiro, múltiplas instruções podem aparecer em um loop break
. No entanto, tenha cuidado. Muitos deles tendem a desestruturar seu código. Segundo, o break
, que encerra a instrução - switch
afeta apenas a instrução - switch
(e não os loops que a incluem). Comente: Break
não foi projetado como um meio normal de terminação de loop. Esse propósito é atendido pela expressão condicional do cabeçalho do loop. A instrução break
só deve ser usada para quebrar o ciclo quando surgirem certas situações especiais.
Use break
como um formuláriogoto
Além de ser usado em instruções switch e loops, break
também pode ser usado sozinho como uma forma "civilizada" do arquivo goto
. Java não contém o operador goto
porque executa a ramificação de forma arbitrária e não estruturada. Código que usa .intensamente goto
normalmente é difícil de entender e manter. Também substitui algumas otimizações do compilador. Existem, no entanto, vários locais em um programa onde goto
o fluxo de controle é uma construção valiosa e legítima. Por exemplo, goto
pode ser útil quando você está saindo de um conjunto de loops profundamente aninhados. Para lidar com tais situações, Java define uma forma estendida do operador break
. Usando-o, você pode sair de um ou mais blocos de código. Esses blocos não precisam fazer parte de um loop ou instrução switch
. Pode ser qualquer bloco. A seguir, você pode determinar exatamente onde a execução continuará porque esse formulário break
funciona com a marca e oferece os benefícios de goto
, contornando seus problemas. Uma break
instrução rotulada tem a seguinte forma geral: break label;
Aqui label
está o nome de um rótulo que identifica algum bloco de código. Quando este formulário break
é executado, o controle é transferido do bloco de código nomeado (cujo rótulo é especificado na instrução break
) para a instrução seguinte a esse bloco. Um bloco de código marcado deve incluir esta instrução break
, mas não é necessário que esta inclusão seja direta (ou seja, break
pode ser incluída não diretamente em um bloco com rótulo próprio, mas em um bloco aninhado dentro dele, possivelmente também marcado) . Isso significa que você pode usar um operador marcado break
para escapar de um conjunto de blocos aninhados. Mas você não pode usar break
um bloco de código que não inclua um arquivo break
. Para nomear um bloco, coloque um rótulo no início do bloco (antes da chave de abertura). Um rótulo é qualquer identificador Java válido seguido por dois pontos. Depois de rotular um bloco, seu rótulo pode ser usado como argumento para o operador break
. Isto fará com que a execução continue a partir do final do bloco marcado. Por exemplo, o programa a seguir contém três blocos aninhados, cada um com seu próprio rótulo. O operador break
avança, além do final do bloco marcado com o rótulo second
, pulando dois operadores println()
.
// Использование break How цивorзованной формы goto.
public class Break {
public static void main(String[] args) {
boolean t = true;
first:
{
second:
{
third:
{
System.out.println("Перед оператором break.");
if (t) {
break second; // выход из блока second
}
System.out.println("Данный оператор никогда не выполнится");
}
System.out.println("Данный оператор никогда не выполнится ");
}
System.out.println("Данный оператор размещен после блока second.");
}
}
}
A execução deste programa gera a seguinte saída:
Перед оператором break.
Данный оператор размещен после блока second.
Um dos usos mais comuns do operador marcado break
é escapar de loops aninhados. Por exemplo, no programa a seguir, o loop externo é executado apenas uma vez:
// Использование break для выхода из вложенных циклов.
public class BreakLoop4 {
public static void main(String[] args) {
outer:
for (int i = 0; i < 3; i++) {
System.out.print("Итерация " + i + ": ");
for (int j = 0; j < 100; j++) {
if (j == 10) {
break outer; // выйти из обоих циклов
}
System.out.print(j + " ");
}
System.out.println("Эта строка никогда не будет выведена");
}
System.out.println("Цикл завершен.");
}
}
O programa gera a seguinte saída:
Итерация 0: 0 1 2 3 4 5 6 7 8 9 Цикл завершен.
É fácil ver que quando o loop interno é interrompido antes do final do loop externo, ambos os loops terminam. Tenha em mente que você não pode break
pular para qualquer rótulo que não esteja definido para o bloco envolvente. Por exemplo, o programa a seguir é inválido e não será compilado:
// Эта программа содержит ошибку.
public class BreakErr {
public static void main(String[] args) {
one:
for (int i = 0; i < 3; i++) {
System.out.print("Итерация " + i + ": ");
}
for (int j = 0; j < 100; j++) {
if (j == 10) {
break one; //He верно!
}
System.out.print(j + " ");
}
}
}
Como um loop marcado como 1 não inclui uma instrução break
, não é possível transferir o controle para este bloco.
Usando o operadorcontinue
Às vezes é útil iniciar a próxima iteração de um loop mais cedo. Ou seja, você precisa continuar executando o loop, mas parar de processar o restante do código em seu corpo para esta iteração específica. Na verdade, esta é uma goto
transição das próximas operações do corpo até o final do bloco de loop. Esta ação é executada pelo operador continue
. Em loops, o operador while
and faz com que o controle seja transferido diretamente para a expressão condicional que controla o loop. Num loop, o controle passa primeiro para a parte iterativa da instrução e depois para a expressão condicional. Para todos os três loops, qualquer código intermediário é ignorado. Um exemplo de programa que usa para imprimir dois números em cada linha é fornecido abaixo: do while
continue
for
for
continue
// Демонстрирует continue.
public class Continue {
public static void main(String[] args) {
for (int i = 0; i < 10; i++) {
System.out.print(i + " ");
if (i % 2 == 0) {
continue;
}
System.out.println("");
}
}
}
Este código usa a operação %
(módulo) para verificar se algo está i
par. Nesse caso, o loop continua sem imprimir um caractere de nova linha. Saída do programa:
0 1
2 3
4 5
6 7
8 9
Assim como acontece com o operador break
, continue
você pode definir um rótulo indicando qual loop envolvente deve continuar. Um programa de exemplo que usa continue
para imprimir uma tabuada de multiplicação triangular de 0 a 9.
// Использование continue с меткой.
public class ContinueLabel {
public static void main(String[] args) {
outer:
for (int i = 0; i < 10; i++) {
for (int j = 0; j < 10; j++) {
if (j > i) {
System.out.println();
continue outer;
}
System.out.print(" " + (i * j));
}
}
System.out.println();
}
}
A instrução continue
neste exemplo encerra a avaliação do loop j
e continua com a próxima iteração do loop conduzido por i
. Saída deste programa:
0
0 1
0 2 4
0 3 6 9
0 4 8 12 16
0 5 10 15 20 25
0 6 12 18 24 30 36
0 7 14 21 28 35 42 49
0 8 16 24 32 40 48 56 64
0 9 18 27 36 45 54 63 72 81
É extremamente raramente útil continue
. Uma razão para isso é que Java fornece um rico conjunto de instruções de loop que atendem à maioria das aplicações. Contudo, para aquelas situações especiais em que é necessário terminar a iteração mais cedo, a instrução continue
fornece uma forma estruturada de realizar esta tarefa.
Operadorreturn
A última instrução de controle é return
. É usado para retornar explicitamente de um método, ou seja, transfere o controle do programa de volta para o programa chamador. O operador return
é classificado como operador de transição. Embora sua discussão completa deva esperar até que os métodos sejam discutidos, uma breve visão geral é fornecida aqui return
. O operador return
pode ser usado em qualquer lugar de um método para voltar ao programa que chama o método. A instrução return
encerra imediatamente a execução do método em que está. O exemplo a seguir ilustra isso:
// Демонстрирует return.
public class Return {
public static void main(String[] args) {
boolean t = true;
System.out.println("Перед оператором return.");
if (t) {
return; // возврат в вызывающую программу
}
System.out.println("Этот оператор никогда не выполнится.");
}
}
Isso return
retorna ao sistema Java em tempo de execução, pois é o sistema que chama o arquivo main()
. Saída deste programa:
Перед оператором return.
Você pode notar que a instrução final println()
não é executada. No tempo de execução, return
o controle é transferido de volta para o programa chamador. Uma nota final. No programa anterior, o if
operador (t) é necessário. Sem ele, o compilador Java geraria um erro de “código inacessível” porque saberia que a última instrução println()
nunca seria executada. Para evitar esse erro, o operador (t) é usado if
; ele engana o compilador para esta demonstração. Link para a fonte original: Operadores de transição
GO TO FULL VERSION