Questão de certificação

11 respostas
camillabrasilia
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”?

11 Respostas

brlima

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

Rafael_Nunes

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

static { }

?

ricardolecheta

“Rafael Nunes”:
ALguém poderia me explicar o conceito, como funciona, a utilidade de

static { }

?

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();
P

E qual a resposta certa disso mesmo…

Rafael_Nunes

eu acredito que seja “bca”

P

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

brlima

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:

Rafael_Nunes

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…

P

Agora deu para entender blz…

elvishr

Uma classe com o bloco:

static { 
}

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

static class …

???

Rafael_Nunes

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

Criado 13 de fevereiro de 2004
Ultima resposta 30 de mar. de 2004
Respostas 11
Participantes 6