A ordem que as coisas acontecem

8 respostas
balrog

qual o resultado ?

public class InitClass
{
   public static void main(String args[ ] )
   {
      InitClass obj = new InitClass(5);
   }
   int m;
   static int i1 = 5;
   static int i2 ;
   int  j = 100;
   int x;
   public InitClass(int m)
   {
      System.out.println(i1 + "  " + i2 + "   " + x + "  " + j + "  " + m);
   }
   { j = 30; i2 = 40; }  // Instance Initializer
   static { i1++; }      // Static Initializer
}

8 Respostas

wbsouza

Este codigo meio estranho, mas vamos lá.

Vai imprimir 6, 40, 0, 30, e 5

por que i1 = 6:
static int i1 = 5; mas depois tem um bloco estatico que incrementa em 1. Na verdade vai depender de quantas vezes vc instanciar 1 objeto.

por que i2 = 40:
Temos aqui tambem um bloco de codigo que seta a variavel toda vez que um objeto é instanciado, assim, mesmo que ela nao tenha sido inicializada, quando vc gerar uma instancia da classe, este bloco de codigo será executado. Algo como um constructor, mas sem a possibilidade de sobrescrever.

Por que x = 0:
nao foi setado nenhum valor, assim o java inicializa automaticamente com zero.

Por que j = 30:
o mesmo caso do i2, é setado o valor 30 para j

Por que m = 5;
Ora, é passado como parametro no construtor.

A sequencia para o codigo java é o seguinte.

  1. seta as variaveis estaticas.
  2. executa algum bloco estático, se existir
  3. seta as variaveis do objeto (quando instanciado)
  4. executa algum bloco (quando instanciado)
  5. executa o constructor

Pelo que entendí é isso.

[]s Welington B. Souza

balrog

perfeito !!

exatamente, dessa forma que o java executa.

questões desse tipo são prováveis de serem encontradas na prova

Paulo_Silveira

“balrog”:
perfeito !!

exatamente, dessa forma que o java executa.

questões desse tipo são prováveis de serem encontradas na prova

nao vai ter dificeis e muito dificeis nao
voce vai se assutar com as pergutnas faceis que tem por la.

Paulo_Silveira

Welington, vai ser sempre 6 independente da quantidade de isntanciadas, ja que o bloco que incrementa eh estatico.

E

Correto.

Todas as vezes q a classe for instanciada, i1 será sempre = a 6.
Porque vc declara i1 com valor inicial = 5.

Ver:

static int i1 = 5;

wbsouza

Tem razao, comi bola … :oops:

[]s, Welington B. Souza

D

por que i1 = 6:
static int i1 = 5; mas depois tem um bloco estatico que incrementa em 1. Na verdade vai depender de quantas vezes vc instanciar 1 objeto.

Eu sinceramente agora nao entendi…hehe

Porque pelo que eu 'entendia" de variáveis státicas…eu achava que por exemplo…quando uma nova instancia fosse criada na memória STACK , a JVM iria verificar que esta variavel já existe e pe stática …e a variavel iria receber o valor que que iria constar na variavel statica…no caso o valor “6”…e com o incremento…passaria para “7”…e assim por diante…

nao entendi porque volta “5” novamente… =) :oops: :oops: :oops:

Abraço a todos.!

wbsouza

O Paulo tem razão, veja

Vai ser sempre 6 porque o metodo estático vai executar somente uma vez. Se o bloco nao fosse estático, daí sim, dependeria da quantidade de instancias do objeto que foram feitas.

[]s, Welington B. Souza

Criado 5 de junho de 2003
Ultima resposta 10 de jun. de 2003
Respostas 8
Participantes 5