Solucionado (ver solução)
Solucionado
(ver solução)
1
resposta

Duvida de compilação

Na aula 3 de Lançando exceções na atividade 3 que é o vídeo de Lançando exceções, ele compila o código e a exceção executa primeiro do que a mensagem do system, ele fala que isso as vezes acontece e basta compilar novamente que volta a funcionar, estou tendo o mesmo problema que ele teve mas compilar novamente não esta adiantando, mas quando eu debug o código ele compila primeiro o system, porque isso ocorre e como resolver ?


public class FluxoComTratamento {

    public static void main(String[] args) {
        System.out.println("Ini do main");
        try {
            metodo1();
        } catch (ArithmeticException | NullPointerException ex) {
            System.out.println(ex.getMessage());
            ex.printStackTrace();
        }
        System.out.println("Fim do main");

    }

    private static void metodo1() {
        System.out.println("Ini do metodo1");
        metodo2();
        System.out.println("Fim do metodo1");
    }

    private static void metodo2() {
        System.out.println("Ini do metodo2");

        throw new ArithmeticException("teste de ta muito errado");
        //System.out.println("Fim do metodo2");        
    }
}
1 resposta
solução!

Olá André,

o problema está na saída em que o ex.printStackTrace() imprime. Abrindo a implementação do método ele faz isso aqui:

public void printStackTrace() {
        printStackTrace(System.err);
}

ou seja, ele não imprime no System.out, mas sim no System.err. Meu chute é que o processo que cuida da impressão do buffer do que é colocado no out é diferente do processo que imprime o que está em err. Então como eles ficam concorrendo na hora da execução, a saída vai mudando de acordo com a ordem em que os processos ganharam prioridade. Tanto que se você executar várias vezes, verá que a saída pode ir mudando de uma execução para a outra.