O compilador ‘javac’ e sua análise estática de código.

O código abaixo demonstra que o compilador realiza apenas uma análise estática de código para permitir ou não que um código fonte (*.java) seja compilado.

 

Como o compilador apenas faz a análise estática do código ele não tem condições de verificar que especificamente para este caso, a variável ‘e1’ declarada na linha 1 com certeza será inicializada na linha 3 pois a exceção com certeza será disparada na linha 2. Portanto teremos um erro de compilação na linha 4, pois para o compilador (na ótica da análise estática) a variável e1 não foi, ou melhor, pode não ter sido inicializada.

 

Se a análise do compilador fosse dinâmica ele executaria o código e “perceberia” o que foi dito acima.

 

public class Teste {

void f() throws MyException { // Na declaração do método não é garantido que a exceção declarada (throws MyException) será realmente disparada. A clausula “throws MyException” significa que este método poderá disparar uma exceção, e não garante que realmente ele dispara uma exceção.

throw new MyException();

}

public static void main(String[] args){

// a variável e1 não foi inicializada e será usada na clausula ‘finally’

MyException e1; // linha 1

Teste t = new Teste();

try {

t.f(); // linha 2

} catch (MyException e) {

// como para instrução catch não há garantia de execução (pois não é garantido que o método ‘f()’ disparará a exceção), então também não há garantia de inicialização da variável e1.

e1 = e; // linha 3

System.out.println(“catch1”);

} finally {

try {

// Se substituirmos a linha abaixo por: throw new Exception(); então não há problema em deixar a variável ‘e1’ apenas declarada, por que neste caso ela não teria sido usada. Neste caso o código compilaria.

// Lembre-se de que a instrução finally executará de qualquer jeito.

throw e1; // linha 4

} catch (Exception e) {

System.out.println(“catch2”);

}

}

System.out.println(“end”);

}                

}

class MyException extends Exception {}

 
 

Esta entrada foi publicada em Java com as etiquetas . ligação permanente.

Deixe uma Resposta

Preencha os seus detalhes abaixo ou clique num ícone para iniciar sessão:

Logótipo da WordPress.com

Está a comentar usando a sua conta WordPress.com Terminar Sessão / Alterar )

Imagem do Twitter

Está a comentar usando a sua conta Twitter Terminar Sessão / Alterar )

Facebook photo

Está a comentar usando a sua conta Facebook Terminar Sessão / Alterar )

Google+ photo

Está a comentar usando a sua conta Google+ Terminar Sessão / Alterar )

Connecting to %s