Olá!
No exercício 3, a classe de exceção personalizada sugerida como resposta está diferente do que foi ensinado nas aulas e acabei não entendendo direito, pois rodando o código acabou dando o mesmo resultado.
Resposta sugerida:
class ErroConsultaGitHubException extends RuntimeException {
    public ErroConsultaGitHubException(String mensagem) {
        super(mensagem);
    }
}
Minha classe, de acordo com as aulas:
public class ErroConsultaGitHubException extends RuntimeException {
    String mensagem;
    public ErroConsultaGitHubException(String mensagem) {
        this.mensagem = mensagem;
    }
    @Override
    public String getMessage() {
        return this.mensagem;
    }
}
Na resposta do exercício, não precisou sobrescrever o método, nem criar o atributo. Por gentileza, poderia explicar passo-a-passo entre uma resposta e outra? Grato.
 
            