Lançar em Java
Escreva voce a paragem com throw. Abra Signal.java e lance IllegalArgumentException com a mensagem empty antes de qualquer impressao de water. Compile com javac Signal.java e execute java Signal. O programa para na linha throw; water nao e impresso. Uma segunda demo coloca cups em 0 para o if entrar e lancar. Uma terceira coloca cups em 3 para saltar o if e o ecra imprimir water. Deixe a leitura de ficheiros para a pagina seguinte.
Voce escreve a paragem
Paginas anteriores mostraram uma paragem porque uma linha quebrou uma regra — um indice mau do array lancou ArrayIndexOutOfBoundsException. Esta pagina e a outra direcao. Voce escolhe o tipo de excecao e escreve throw para a paragem ser de proposito. Abra um ficheiro de ensino chamado Signal.java. Mantenha o nome da classe publica Signal para coincidir com o ficheiro. Apague demos catch sobrantes de Guard, paragens de array Alarm e qualquer Scanner ou nextLine. O programa nao deve esperar teclado. Esta pagina nao precisa de linha import.
Dentro de main, lance antes de qualquer impressao calma de sucesso:
throw new IllegalArgumentException("empty");
Depois guarde uma impressao que nao deve correr quando o throw dispara:
System.out.println("water");
As palavras entre aspas sao a mensagem. O nome do tipo e IllegalArgumentException. Voce nao divide por zero nem le slots[5]. A paragem existe porque escreveu throw.
public class Signal {
public static void main(String[] args) {
throw new IllegalArgumentException("empty");
// water would not run after throw
}
}
Na pasta com Signal.java, execute javac Signal.java. Quando parenteses, chavetas e ponto e virgula coincidem, javac nao escreve linha propria. Depois java Signal — nao java Signal.java. Retire o sufixo .java do comando de execucao.
A execucao para na linha throw. O terminal nomeia IllegalArgumentException e mostra a mensagem empty. Uma impressao de water depois desse throw nao corre, porque o programa ja parou. Se guardar um System.out.println("water"); inalcancavel apos o throw no mesmo main, alguns compiladores avisam de codigo inalcancavel; a ideia pedagogica mantem-se: apos throw, linhas normais desse caminho nao correm. Prefira o ficheiro throw nu sem impressao morta se javac reclamar — a paragem e a licao.
Se o terminal esperar teclado, ainda ha uma chamada nextLine de um exercicio antigo num ficheiro. Apague-a. Se vir blocked depois after, ainda executa um ficheiro catch Guard — mude para java Signal. Se vir ArrayIndexOutOfBoundsException de slots[5], um resto Alarm ainda esta ativo; substitua pela linha throw desta licao.
Zero cups entra no if e lanca
Um segundo programa comeca de novo. Guarde cups como 0. Se cups for menor que 1, lance a mesma IllegalArgumentException com mensagem empty. Mantenha uma impressao de water apos o if.
public class Signal {
public static void main(String[] args) {
int cups = 0;
if (cups < 1) {
throw new IllegalArgumentException("empty");
}
System.out.println("water");
}
}
Compile com javac Signal.java, depois execute java Signal. Zero e menor que um, por isso o if e entrado e throw corre. O ecra mostra a mesma paragem: IllegalArgumentException e empty. A palavra water nao e impressa. Nada nesta pagina captura a paragem, o programa termina ai. E intencional — a pagina anterior praticou catch; esta pratica escrever throw.
Percorra as chavetas uma vez. A linha throw esta dentro do bloco if. A impressao water esta fora do if. Quando throw corre, o programa ja parou, logo water nunca e alcancado. Indentacao e chavetas colocam o throw dentro da verificacao.
Tres cups saltam throw e imprimem water
Um terceiro programa tambem comeca de novo. Defina cups para 3. Mantenha o mesmo if, o mesmo throw e a mesma impressao water.
public class Signal {
public static void main(String[] args) {
int cups = 3;
if (cups < 1) {
throw new IllegalArgumentException("empty");
}
System.out.println("water");
}
}
Compile e execute outra vez com javac Signal.java e java Signal. Tres nao e menor que um, por isso o if nao e entrado. O throw nunca corre. O ecra imprime water. Nao ha paragem. Esse contraste e o ponto de controlo: o throw so dispara quando a condicao diz que o valor nao serve.
Nao invente catch em volta destes ficheiros de ensino nesta pagina. Ja praticou catch em Guard. Aqui precisa ver a paragem que escreveu e o caminho que salta o throw. Tambem nao substitua IllegalArgumentException por ArrayIndexOutOfBoundsException para cups vazias — esse nome era de indice mau, nao de verificacao de valor que autorizou com throw.
O nome que escreveu
O tipo que lancou e IllegalArgumentException, nao ArrayIndexOutOfBoundsException nem a palavra empty sozinha como tipo. A mensagem empty e o que escolheu mostrar junto ao nome. Se capturar esta paragem depois, a clausula catch deve nomear IllegalArgumentException. Um catch de NullPointerException nao a trataria. Essa pratica de catch nao e obrigatoria hoje nestes ficheiros Signal.
IllegalArgumentException e uma excecao de tempo de execucao no uso habitual de principiante, por isso estas demos pequenas de main nao precisam de clausula throws em main. Fique com este tipo e mensagem claros. Nao precisa de catalogo de cada classe lancavel antes da pagina seguinte abrir um ficheiro.
Comparado com catch em Guard
Na pagina try-catch, java Guard tratou indice mau e continuou ate after. Nesta pagina, java Signal provoca paragem de proposito e nao a captura. A historia do array e passado. Guarde ficheiros Guard apenas como demos antigas se ficarem perto; execute java Signal para demos throw para o ecra coincidir com esta licao.
O que esta pagina deixa para files
Esta pagina so mostra que provoca paragem com throw. A pagina seguinte comeca a ler um ficheiro. Fique a escrever a paragem e a salta-la quando cups e utilizavel. Nao abra ficheiro como requisito nestas demos Signal ainda.
Antes de files
Pode lancar IllegalArgumentException("empty") e ver a execucao parar antes de water. Com cups em 0, o if entra e a mesma paragem acontece. Com cups em 3, throw nao corre e o ecra imprime water. Compile Signal.java e execute java Signal para cada demo guardada por turno. O nome desta paragem e IllegalArgumentException. A pagina seguinte e ler um ficheiro.
Guarde o throw nu para paragem clara que escreveu. Guarde o par cups para condicao que pode saltar o throw. Mantenha leitura de ficheiros fora desta pagina. Esses tres habitos sao o controlo antes de avancar. Quando water so aparece na execucao cups-em-tres de java Signal, throwing fez o trabalho desta licao e esta pronto para o tema seguinte sobre ficheiros.
🧠 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