Pessoal, no livro as vezes aparecem duas opções de respostas
Compilation fails
An exception is thrown at runtime
Acontece que eu as vezes analiso o problema, entendo o código mas na hora de marcar a lei de Murphy manda: se a resposta é compilation fails eu marco exception e se é exception, marco compilation fails. Acho que ainda não está mto claro, o que pode gerar um, e o que pode gerar outro.
Por exemplo: variável de método não inicializada - compilation fails - atribuir array bidimensional à dimensional - exception.
Tem alguma regra digamos mais genérica pra escolher entre estas opções?
E na prova ainda é muito comum ele te perguntar qual foi o erro de compilação ou qual foi a exception lançada.
Não existem regras para decorar, mas algumas dicas podem ajudar. O compilador é responsável por verificar sintaxe e tipos (Java é uma linguagem fortemente tipada). Mas o compilador não executa o código, então ele não sabe valores de variáveis, parâmetros ou qualquer outra coisa que possa estar condicionada ao momento de execução.
Deixar de inicializar variável? Erro de compilação.
Acessar posição inválida no array? ArrayIndexOutOfBoundsException (o compilador não sabe o valor que você vai passar)
Atribuir tipos errados? Erro de compilação. (incluindo jogar um array bidimensional em um unidimensional; erro de compilação, não exception)
Abrir um arquivo inexistente? FileNotFoundException.
Chamar um método, atributo ou construtor que não existe? Erro de compilação.
Fazer um casting inválido? Pode ser erro de compilação se o casting obviamente violar o sistema de tipos (um ArrayList nunca pode ser uma String, nem adianta fazer casting). Ou ClassCastException se na hora da execução o objeto não é do tipo certo.