Bloco Inicialização

4 respostas
C

Olá pessoal estou com uma dúvida referente ao seguinte codigo:

public class Tarsier {

	static String s = "-";

	public static void main(String[] args) {		
		//new Tarsier().go();	<--- linha 6	
		go();                //<--- linha 7
		System.out.println(s);
		

	}

	{
		System.out.println("bloco nao estático");
		go();
	}
	
                 static{
		System.out.println("bloco estático");
		go();
	}
	static void go() {
		s += "s";	
		
	}

}

O código assim NÃO executa o bloco não estático, mas se eu comentar a linha 7 e descomentar a linha 6, chamando go() atraves de uma instância da classe, o bloco não estático e executado, não entendi o por quê ?

Obrigado.

4 Respostas

J

go() é um metodo estático da classe Tarsier, então você pode usar Tarsier.go() que vai funcionar tb, sem precisar instanciar o Tarsier!!

gabrielmassote

Tudo bem cadu.sousa?

é o seguinte, bloco de inicialização estáticos só executam 1 vez, ou seja, se instanciar várias vezes a sua classe ai o bloco estatico so executara uma vez. Agora os de instancia eles executam a cada nova instanciacao de sua classe. Por isso que ele nao roda quando voce chama só o metodo go(), q é estatico.

abraco e espero ter ajudado.

berg.pb
  1. o bloco MAIN, por ser estatico, só faz chamadas a métodos estaticos
  2. qdo vc esta instanciando o onovo objeto, vc esta chamando direto o metodo nao estatico go(), sem passar pelo main deste novo objeto.
gabrielmassote

Penso eu e sem compilar esse código aqui, que quando executa só a linha 7 e deixa a 6 comentada a saída será:

bloco estatico // executa todos blocos estaticos
-ss // pois concatena com o metodo go do blco estatico com o do main

e descomentando a linha 6 sera:

bloco estatico // executa todos blocos estaticos
bloco nao estatico // // executa todos blocos de instancia
-ssss // concatena por todos os metodos e os do main

Criado 17 de dezembro de 2008
Ultima resposta 17 de dez. de 2008
Respostas 4
Participantes 4