Exceções em Java
Mantenha um array pequeno int chamado slots que guarda 2 e 4. Imprima slots[0] para a tela mostrar 2. Depois aprenda o que acontece se você pedir slots[5] no lugar: Java lança ArrayIndexOutOfBoundsException e o programa para. Compile primeiro Alarm.java e execute java Alarm no arquivo seguro. Ver uma parada em tempo de execução por uma regra quebrada — não por ponto e vírgula faltando — é o que esta página ensina. Deixe try e catch para a página seguinte.
Uma leitura segura que termina
Uma exceção é o jeito de Java dizer que uma regra quebrou enquanto o programa rodava. Até agora a maioria das demos imprimia uma linha clara e terminava em silêncio. Esta página guarda primeiro uma demo quieta, depois uma demo que para com um nome de exceção.
Abra Alarm.java. Mantenha o nome da classe pública Alarm para combinar com o nome do arquivo. Apague restos de ArrayList<Integer>, nums.add(9), demos Crate e qualquer for-each sobre oak e pine. Apague também qualquer Scanner ou nextLine. O programa não deve esperar digitação. Esta página não precisa de linha import.
Dentro de main, guarde dois números inteiros:
int[] slots = {2, 4};
Depois imprima o primeiro slot:
System.out.println(slots[0]);
Os números de slot começam em zero. O slot zero guarda 2. Salve antes de compilar.
public class Alarm {
public static void main(String[] args) {
int[] slots = {2, 4};
System.out.println(slots[0]);
}
}
Da pasta que tem Alarm.java, execute javac Alarm.java. Quando parênteses, chaves e pontos e vírgulas batem, javac não escreve linha própria. Depois execute java Alarm — não java Alarm.java. Tire o final .java do comando de execução.
O programa deve imprimir uma linha e parar: 2. Não deve pedir que você digite. Se o terminal espera entrada do teclado, ainda há uma chamada nextLine de exercício antigo em um arquivo. Apague essa chamada e mantenha o array mais System.out.println(slots[0]);.
Percorra a execução uma vez. Java começa em Alarm.main. O array guarda dois valores. A impressão lê o slot zero. A tela mostra 2. Nada mais deve imprimir. Se você vir 9, ainda roda uma demo wrappers de Crate — mude para java Alarm. Se vir 4, você imprimiu slots[1]; o arquivo seguro de ensino mantém slots[0].
Um índice ruim que lança
Mude só a linha de impressão para pedir um slot que nunca foi escrito: slots[5]. O array ainda tem só dois slots. Em tempo de execução Java lança uma exceção em vez de imprimir um número.
public class Alarm {
public static void main(String[] args) {
int[] slots = {2, 4};
System.out.println(slots[5]);
}
}
Compile com javac Alarm.java e depois execute java Alarm. Desta vez o programa não imprime 2. O terminal mostra um relatório de erro que nomeia ArrayIndexOutOfBoundsException. A execução para. Linhas que você imaginava depois dessa impressão não rodam, porque a exceção já parou o programa. Note que javac ainda pode ter sucesso — o índice ruim é problema de tempo de execução, não ponto e vírgula faltando.
Essa parada é a lição. Você não corrige o índice nesta página com try. Você aprende a reconhecer que uma regra quebrada em tempo de execução vira exceção e encerra o caminho normal. Leia o nome da exceção no relatório. Mantenha o arquivo de índice ruim só para ver essa parada. Prefira o arquivo seguro quando quiser tela quieta com 2. Se voltar o índice ruim para slots[0], a tela quieta volta; isso prova que a parada veio do índice, não do nome da classe Alarm.
Não trate o relatório de pilha como resultado normal de println. Java está dizendo o que deu errado. A grafia do tipo de exceção importa quando você fala dela: ArrayIndexOutOfBoundsException. Dizer só «erro» é vago demais para esta lição — mantenha o nome completo do tipo ao descrever a parada.
Resto de wrappers não é este crash
Um terceiro arquivo lembra a lista Integer da página anterior. Essa demo imprime 9 e termina. Não é a história da exceção.
import java.util.ArrayList;
public class Alarm {
public static void main(String[] args) {
ArrayList<Integer> nums = new ArrayList<Integer>();
nums.add(9);
System.out.println(nums.get(0));
}
}
Esse contraste imprime 9 e termina sem lançar. Use-o só para separar um caminho wrappers terminado do caminho Alarm de índice ruim. Para esta lição de exceções, o par de ensino é a impressão segura slots[0] e a impressão que lança slots[5]. Não invente try nem catch em volta de nenhuma demo de array nesta página.
Comparado com arrays e com wrappers
Na página de arrays você ficou dentro dos slots escritos. Esta página sai de propósito para você ver a exceção. Na página de wrappers uma lista de Integer imprimiu 9 sem crash. Isso ainda vale como histórico. Para esta página mantenha Alarm e a história do índice do array.
Outras exceções existem — por exemplo dividir por zero pode lançar ArithmeticException. Esta página guarda um nome claro: ArrayIndexOutOfBoundsException de um índice ruim. Você não precisa hoje de um catálogo de todo tipo de exceção. Um exemplo sólido basta antes da página seguinte ensinar o tratamento.
Quando arquivos antigos Crate.java ainda estão perto, deixe-os ou apague só se confundirem qual classe você executa. Execute java Alarm depois de compilar o arquivo da demo que quer. Troque de arquivo de propósito para a impressão segura e a que lança não se misturarem num só main enquanto estuda.
O que fica para try e catch
Esta página mostra que uma exceção pode parar um programa em tempo de execução. A página seguinte apresenta try e catch para você tratar alguns problemas sem encerrar toda a execução. Fique aqui reconhecendo a parada e o nome da exceção. Não invente ainda um bloco catch como exigência nesta página.
Antes de try e catch
Você pode imprimir slots[0] de {2, 4} e ver 2. Você pode imprimir slots[5] e ver a execução parar com ArrayIndexOutOfBoundsException. Compile Alarm.java e execute java Alarm por vez para cada demo guardada. A exceção nomeou com clareza a regra quebrada. A página seguinte é try e catch, onde um caminho tratado pode continuar depois de alguns erros.
Mantenha a demo segura para tela quieta. Mantenha o índice ruim para ver a parada. Mantenha try fora desta página. Esses três hábitos são o checkpoint antes de seguir. Quando você puder nomear ArrayIndexOutOfBoundsException após a execução de índice ruim de java Alarm, as exceções fizeram o trabalho desta lição e você está pronto para o próximo tema sobre tratamento.
🧠 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