Carregando...

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.

Signal bare throw stops before water

java
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.

Signal zero cups throws

java
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.

Signal three cups prints water

java
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

Pronto para Começar

Teste Seu Conhecimento

Desafie-se com este questionário interativo e veja o quão bem você entende o tópico

❓
4
Perguntas
🎯
70%
Para Passar
♾️
∞
Tempo
🔄
∞
Tentativas

📝 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