Questão de certificação

public class Teste{

	static public void main(String[] arg){
       
       System.out.print(TesteA.teste);    
	}
}

class TesteA {

	static String teste = "a";
	static {
			String nome = "b";
			System.out.println(nome);		
			TesteA obj = new TesteA();
	}
	TesteA(){
		System.out.println("c");	
	}
}

Essa eu acertei, mas tudo bem que ela está fácil.
Espero que a prova de certificação esteja neste nível de dificuldade.

O que irá acontecer ao tentar compilar e rodar a classe “Teste.class”?

Vai imprimir: “b,c,a”… certo ??? :shock: ai q meda… hehehehehe

ALguém poderia me explicar o conceito, como funciona, a utilidade de

static { }

?

[quote=“Rafael Nunes”]ALguém poderia me explicar o conceito, como funciona, a utilidade de

static { }

?[/quote]

falando claro e direto,
o codigo entre static{ } vai rodar a 1ª vez que a classe for utilizada.

Teste t1 = new Teste(); // o static{} só vai rodar a primeira vez
Teste t2 = new Teste();
Teste t3 = new Teste();

E qual a resposta certa disso mesmo…

eu acredito que seja “bca”

Porque você acha que o resultado será “bca”?

Só se a JVM estiver executando errado…rsss…
Mas nao tem segredo:
ao usar a classe para imprimir o conteudo statico do campo “teste”, ele primeiro inicializa os blocos estaticos da classe, carregando teste=“a”, depois executando o bloco onde inicializa nome=“b”, imprime ele ( output: “b” ). Cria uma instancia da classe TesteA, que por sua vez chama o TesteA() que é o contrutor da classe, imprimindo “c” ( output: “b c” ). Depois de todos os blocos inicializados ok, imprime o conteudo do campo estatico teste que é “a” ( output: “b c a” )…

Aeee … :smiley:

Vamos lá,
O método main esta imprimindo a a variável de referência “teste” da classe TesteA, porém antes de imprimir está variável, ela irá executar um classloader para carregar a classe TesteA em memóri, ao executar o construtor ela irá executar primeiramente o bloco static (imprimindo “b”), logo depois executará o construtor de TesteA(imprimindo “c”), e somente depois imprimindo a variável teste (a). Logo, “bca”.

Acho que é mais ou menos isso. Não sei se me fiz entender…

Agora deu para entender blz…

Uma classe com o bloco:

static { 
}

faz com que a classe seja a mesma coisa que quando criada com:

static class …

???

Não, o bloco static é um bloco executado sempre que a classe for carregada pela primeira vez…