Questao facil

8 respostas
F

essa eh facil:

o que acontece apos compilar e executar esse programa?

public class Teste{
 static{
  System.out.println("STATIC1");
  try{
   Thread.sleep(1000);
  }
  catch (Exception erro){}
  System.out.println("STATIC2");
 }
 public static void main(String args[]){
  System.out.println("MAIN1");
  try{
   Thread.sleep(1000);
  }
  catch (Exception erro){}
  System.out.println("MAIN2");
 }
}

8 Respostas

F

cara eu acho q vai imprimir STATIC1, depois de no mínimo 1 segundo (Esse tempo não pode ser determinado com certeza, o q se pode afirmar é q no minimo a Thread main dorme 1 segundo, depois disso cabe ao escalonador decidir qdo da uma CPU pra essa Thread) daí imprimi STATIC2, logo em seguinda MAIN1, dorme mais 1 seg. e imprime MAIN2.

é isso? :oops:

J

me obriguei a testar…
casca isso… primeiro pq mesmo a classe Teste ser estatica ela nao eh comentada no metodo main, mesmo assim ela eh a primeira executar, nao entendi nada… mas rodou e sai isso mesmo q o fabio postou
8O

F

“javaquest”:
me obriguei a testar…
casca isso… primeiro pq mesmo a classe Teste ser estatica ela nao eh comentada no metodo main, mesmo assim ela eh a primeira executar, nao entendi nada… mas rodou e sai isso mesmo q o fabio postou
8O

cara agora foi eu q boiei na sua duvida, mas vou tentar esclarecer o q entendi q vc n entendeu, hehehe!

primeiro) a classe não é estática

segundo) o q ela tem de estático fora o metodo main é um bloco, um bloco estático, que é perfeitamente admissivel em qualquer parte (OUTER) da classe, pode vim antes ou depois do método main.

terceiro) um bloco estático é executado uma vez, somente uma vez, assim que a classe é carregada em memoria, não necessariamente se foi ou ñ instanciada, o fato é q ocorre antes de tudo!!

compliquei?!

S

O que acontece é que a classe n eh instanceada em momento algum…,
se ela fosse ai que seus metodos staticos iriam executar!!!
como n é somento o que tem dentro do metodo main será executado!!! :yyeah: :roto:

quer pipoca?
:popcorn:

J

nao, nao complicou, pelo contrario exclareceu Fabio valew.
eu realmente nao conhecia essa propriedade do bloco estatico, ele executar antes de qualquer chamada, mesmo de um outro metodo estatico como System.out.println(“MAIN1”) da propria main sem ao menos ser citado; isso q foi confuso…
:razz:

F

fabiostb acertou em cheio!

qnto ao tempo do Thread.sleep, ele realmente nao eh preciso, mas a intensao de eu ter colocado lah nao eh saber q nao eh preciso, e sim pq a intensao da questao era ver se vcs sabiam se os blocos estaticos era executados antes ou simutaneamente ao metodo main

S

Por que não é preciso? Só tem uma thread (a main).
Considerando só o cenário da JVM, claro.

F

“Schuenemann”:
Por que não é preciso? Só tem uma thread (a main).
Considerando só o cenário da JVM, claro.

acho q o Felipe quis dizer q mesmo se tirassemos o sleep o resultado seria o mesmo (sem a dormidinha), e é esse o objetivo da questao: saber se vc sabe q o bloco static executa antes do main. :???:

uma coisa q Felipe esqueceu de mencionar é q o bloco try/cath e o sleep nesse questão serve para direcionar a atenção do caba pra uma casca de banana :lol: hehehehe

Criado 28 de março de 2005
Ultima resposta 29 de mar. de 2005
Respostas 8
Participantes 5