O Java não inicializa variáveis locais?

Boa tarde!

Estou com uma pequena dúvida, simples, porém, pertinente.

Eu gostaria de saber se o Java não inicializa as variáveis locais (declaradas dentro de algum método ou como paramêtros do mesmo) ?

Observe esse código:

package exemplos;

public class TesteDeInicialzacao {

	int atributo; // variável de instância
	
        /** Construtor.
              Testa a iniciaização automática feita pelo Java   */
	private TesteDeInicialzacao() { 

		System.out.prinln( atributo ); // Imprime o valor do campo inteiro 'atributo'
		atributo+=2; // Faz uma operação com o campo 'atributo'

		
               int local; //Criando uma variável com escopo local
		
		System.out.println(local); // Imprime o valor da variável local
                local+=2;  // Faz uma operação com a variável local
	} // Fim do construtor
	
	public static void main(String[] args) {
		new TesteDeInicialzacao();  //Executa o construtor
	} // Fim do método main
} // Fim da classe

As linhas que executam ações sobre a variável de instância ‘atributo’ não apresentam anomalias, pois é impresso o
valor zero ( que é o default para inteiros) e a soma é feita normalmente. Mas as linhas que executam ações sobre a variável ‘local’ apresentam
erros de compilação.

Alguém saberia explicar isto ?

Não inicializa.

Ele inicializa atributos, mas não variáveis locais.

Elas dão o erro de compilação de “variável não foi inicializada”.

isso mesmo meu amigo… quando agente declara um atributo da classe, esse atributo é instanciado com valores default. Dentro de um método (o que não é atributo de classe) ele não apresenta um valor definido possuindo lixo nelas. Nesse caso, você é obrigado a inicializá-la.

O java não inicializa as variáveis locais.

Existem várias explicações. Uma delas é que o compilador pressupõe que a variável de instância vai ser inicializada em algum lugar, não só no escopo em que ela é usada. Se isso não ocorre, é atribuído um valor padrão à variável, descrito aqui. Já no caso de uma variável local, se ela não for inicializada e for usada no mesmo escopo o compilador reconhece isso como um erro de programação.

Entendi.

Muito obrigado !