try e catch em Java
Envolva a leitura má de slots[5] em try e catch para o programa não terminar em ArrayIndexOutOfBoundsException. Imprima blocked dentro do catch e depois after fora dos dois blocos. Compile Guard.java e execute java Guard. O ecrã deve mostrar blocked e depois after. Um segundo ficheiro mantém slots[0] dentro de try para o catch ser saltado e o ecrã mostrar 2 e depois after. Deixe throw para a página seguinte.
Apanhar o índice mau
A página de exceções mostrou que imprimir slots[5] em {2, 4} lança ArrayIndexOutOfBoundsException e para a execução. Esta página mantém a mesma história do array e acrescenta o tratamento. Abra um novo ficheiro de ensino chamado Guard.java. Mantenha o nome da classe pública Guard para coincidir com o nome do ficheiro. Apague mains restantes de Alarm que param sem catch, listas Integer de Crate e qualquer Scanner ou nextLine. O programa não deve esperar escrita.
Dentro de main, mantenha o mesmo array pequeno:
int[] slots = {2, 4};
Coloque a impressão má dentro de try:
System.out.println(slots[5]);
Depois escreva um catch que nomeie ArrayIndexOutOfBoundsException e imprima blocked. Depois de todo o try e catch, imprima after. O nome do parâmetro do catch pode ser uma letra curta como e; não precisa de imprimir o objeto da exceção nesta página.
public class Guard {
public static void main(String[] args) {
int[] slots = {2, 4};
try {
System.out.println(slots[5]);
} catch (ArrayIndexOutOfBoundsException e) {
System.out.println("blocked");
}
System.out.println("after");
}
}
Da pasta que guarda Guard.java, execute javac Guard.java. Quando parênteses, chavetas e ponto e vírgula coincidem, o javac não escreve uma linha própria. Depois execute java Guard — não java Guard.java. Tire o final .java do comando de execução.
O ecrã mostra blocked e depois after. O índice mau continua a lançar dentro de try. O catch trata essa exceção nomeada e imprime blocked. A linha System.out.println("after"); está fora, por isso também corre. O programa não termina nessa paragem como o ficheiro mau nu de Alarm.
Imagine uma segunda impressão ainda dentro do mesmo try depois de slots[5], por exemplo uma linha que imprimiria rice. Essa linha não corre. Apanhar a exceção não volta a terminar o resto do try. Só o corpo do catch corre para essa paragem; depois o controlo continua após o catch. Mantenha a ideia clara: o tratamento salta as linhas restantes dentro de try depois do ponto de lançamento.
Se o terminal esperar entrada de teclado, ainda há uma chamada nextLine de um exercício antigo num ficheiro. Apague-a. Se só vir um relatório de pilha sem a linha blocked, falta o catch ou o nome da exceção não coincide. Se vir só 2 sem after, talvez ainda esteja a executar um Alarm seguro antigo — passe a java Guard com o ficheiro de ensino do catch.
Quando o try termina, o catch fica quieto
Um segundo programa usa a mesma forma de try e catch, mas a impressão dentro de try pede um lugar escrito: slots[0]. Todas as linhas dentro de try terminam. O corpo do catch não corre.
public class Guard {
public static void main(String[] args) {
int[] slots = {2, 4};
try {
System.out.println(slots[0]);
} catch (ArrayIndexOutOfBoundsException e) {
System.out.println("blocked");
}
System.out.println("after");
}
}
Compile com javac Guard.java e depois execute java Guard. O ecrã mostra 2 e depois after. A palavra blocked não é impressa, porque não houve ArrayIndexOutOfBoundsException. O catch ficou quieto. A linha after ainda corre porque está fora de ambos os blocos — o mesmo sítio da demo do catch.
Percorra o contraste uma vez. Primeiro ficheiro: índice mau, catch imprime blocked, depois after. Segundo ficheiro: índice seguro, catch saltado, ecrã 2 depois after. Ambos mantêm Guard e o mesmo nome de tipo do catch. Só o índice dentro de try muda. Essa única mudança basta para ver quando o catch corre e quando não.
Não invente um throw nesta página. Está a apanhar uma exceção que uma leitura má do array já provoca. A página seguinte é sobre lançar de propósito. Também não envolva hoje cada impressão calma do curso dentro de try — esta lição usa try onde um índice mau conhecido precisa de um caminho tratado.
O nome do catch tem de coincidir
A cláusula catch nomeia um tipo de exceção. Nesta página esse tipo é ArrayIndexOutOfBoundsException, coincidindo com o índice mau. Se escrevesse catch (NullPointerException e) à volta de slots[5], esse catch não trataria a paragem. O programa ainda terminaria com ArrayIndexOutOfBoundsException, e nem blocked nem after seriam impressos para esse catch que não coincide. Mantenha o tipo coincidente nos ficheiros de ensino.
Existem outros nomes de exceção em Java. Esta página fica com um par claro: um índice mau de array e ArrayIndexOutOfBoundsException. Não precisa de um catálogo de cada tipo apanhável antes de praticar esta forma. Faça coincidir o nome que viu na página de exceções.
Comparado com a paragem nua do Alarm
Na página de exceções, java Alarm com slots[5] parou e mostrou um relatório de pilha. Nesta página, java Guard com o mesmo índice mau imprime blocked e continua até after. A história do array não mudou. O tratamento mudou. Mantenha ficheiros Alarm só como história se ainda estiverem perto; execute java Guard para as demos do catch para o ecrã coincidir com esta lição.
A história wrappers ainda imprime 9 de uma lista Integer se guardar esse ficheiro antigo. Esse caminho não é a história do catch. Apague ou ignore demos restantes de ArrayList<Integer> dentro de Guard.java para o ficheiro de ensino ficar em int[] slots mais try e catch.
O que esta página deixa para throwing
Esta página apanha uma exceção que uma linha já encontra. A página seguinte introduz throw para sinalizar um problema você mesmo. Fique aqui com um catch que coincida e com ver after continuar. Ainda não acrescente um throw manual como requisito nestes ficheiros Guard.
Antes de throwing
Pode apanhar ArrayIndexOutOfBoundsException de slots[5] e ver blocked, depois after. Pode manter slots[0] dentro de try e ver 2, depois after, com catch saltado. Compile Guard.java e execute java Guard para cada demo guardada à vez. O nome do catch coincidiu com a paragem do índice mau. A página seguinte é throwing, onde causa uma paragem de propósito.
Mantenha a demo do catch para um caminho tratado. Mantenha o try seguro para saltar o catch em silêncio. Mantenha o throw manual fora desta página. Esses três hábitos são o ponto de controlo antes de avançar. Quando blocked e depois after aparecerem após a execução do índice mau de java Guard, try e catch fizeram o trabalho desta lição e está pronto para o tema seguinte sobre throwing.
🧠 Teste Seu Conhecimento
Teste Seu Conhecimento
Desafie-se com este questionário interativo e veja o quão bem você entende o tópico
📝 Instruções
- Leia cada pergunta cuidadosamente
- Selecione a melhor resposta para cada pergunta
- Você pode refazer o quiz quantas vezes quiser
- Seu progresso será mostrado no topo