Questão de certificação (static)

9 respostas
T
public class Static {

    static{ //Só para confundir? como na desatenção passa por um construtor???
    	int x = 5;
    }
    
    static int x,y;
    
    public static void main(String args[]){
    	x--; //x nao esta sendo inicializado entao vale 0 decrementando vira -1    	
    	myMethod();
    	System.out.println(x + y + ++x); //x vale 1, y vale 0 e ++x vale 2 (o incrementador na frente incrementa antes e usa depois)
    }
    
    public static void myMethod(){
    	System.out.println(x); 
        //por ser estatico x nao perde o valor de -1
    	y = x++ + ++x; //y vale 0 e x vale 1
    }        
}

Bom dia a todos, tenho uma duvida com respeito ao static ai em cima, mais precisamente este:

static{ //Só para confundir? como na desatenção passa por um construtor???
int x = 5;
}

ele é só para confundir? quando teria uma serventia?

Obrigado

9 Respostas

rodrigo.ferreira

Bom dia,

Este tipo de estrutura chama-se “Bloco de Inicialização Estático”; isto é perfeitamente válido, e ele executa junto com a criação da classe. O que esta questão realmente trata é o “Sombreamento de Variáveis”. Ela deseja se certificar que você realmente sabe que a variável “x” criada dentro do bloco de inicialização tem sua vida apenas dentro desse bloco, ou seja, ela não tem nenhum vínculo com a variável “x” criada na classe, e nem altera o valor desta.

Isto é muito bem tratado no livro da Kathy Sierra.

Espero ter ajudado!
Abraço.

davidtiagoconceicao

Este é um bloco de inicialização estática.
Ele vai ser executado na primeira vez que a classe for referenciada, antes do construtor.
Nas demais referencias à classe ele não será executado.

cris.t

Olá,

Este bloco static será a primeira coisa executada quando a JVM carregar a classe, não necessáriamente quando ela for instanciada, já o construtor será o método executado quando a classe for instanciada.

Jeferson_Manetti

olá...

como tds acima ja falaram blocos static executam qnd a classse e carregada... e e muito utilizada para inicializar variaveis static...

bom talvez isso seja um pouco alem do Forum de Certificação...

mas pelo q eu entendi o amigo quer um exemplo pratico de blocos Static....

segue um exemplo da utilização deste bastante utlizado...

public class HibernateFactory {  
          
        private static SessionFactory factory;  
          
        static {  
            AnnotationConfiguration cfg = new AnnotationConfiguration ();  
            cfg.addAnnotatedClass(Produto.class);  
            factory = cfg.buildSessionFactory();  
        }  
         
       public Session getSession(){  
           return factory.openSession();  
       }  
     
   }

veja q estou utilizando o bloco static para "configurar" minha variavel static...
isso e muito util... ja pensou se td vez q eu tiver q utilizar uma seção digitar td cod acima... ficaria loko...

bom espero q o exemplo ajude a entende melhor^^

ricardo13

olá pessoal,

Aproveitando essa questão, eu tive uma dúvida relacionada a essa expressão:

y = x++ + ++x;

Analisando primeiramente, eu vi o 1º termo (x++) só seria incrementado após a toda a operação.
Mas me parece que o valor x é incrementado assim que ele foi analisado.

Ainda estou confuso com relação ao 1º termo em “Quando” a variavel vai ser incrementada ??

Muito Obrigado

Ricardo

maior_abandonado
ricardo13:
olá pessoal,

Aproveitando essa questão, eu tive uma dúvida relacionada a essa expressão:

y = x++ + ++x;

Analisando primeiramente, eu vi o 1º termo (x++) só seria incrementado após a toda a operação.
Mas me parece que o valor x é incrementado assim que ele foi analisado.

Ainda estou confuso com relação ao 1º termo em "Quando" a variavel vai ser incrementada ??

Muito Obrigado

Ricardo

bom...to colando o código denovo...apesar de q só seria necessario essa linha ai

bom...no System.out de antes, repare que o x esta com -1... e repare que o x foi incrementado antes da expressão (o segundo valor da soma é ++x, isso significa que primeiro é feito o incremente, e depois a soma da linha q vc coloco)

ou seja...o x ai nessa soma vai valer 0... 0 + 0 = 0, então o y vai valer isso
(eu botei um System.out depois pra confirma)

depois disso o x incrementa denovo e vai valer 1...

o problema esta depois, em "System.out.println(x + y + ++x); "...

ao que me parece, primeiro é feito x + y, para depois fazer esse resultado mais ++x... x estava com 1, +0 =1... e só ai então que esse resultado vai somar com ++x, pra isso x vai valer 2 a partir dai... então 1(resultado anterior) +2 = 3

eu posso estar falando besteira quanto a essa parte de pega os dois primeiros e só depois o resultado com o proximo, mais o resultado no final do post confirmo isso (repare que o ++x não aumento o primeiro x da espressão)

public class Static {

    static{ //Só para confundir? como na desatenção passa por um construtor???
    	int x = 5;
    }
    
    static int x,y;
    
    public static void main(String args[]){
    	x--; //x nao esta sendo inicializado entao vale 0 decrementando vira -1    	
    	myMethod();
    	System.out.println(x + y + ++x); //x vale 1, y vale 0 e ++x vale 2 (o incrementador na frente incrementa antes e usa depois)
    }
    
    public static void myMethod(){
    	System.out.println(x); 
        //por ser estatico x nao perde o valor de -1
    	y = x++ + ++x; //y vale 0 e x vale 1
	System.out.println(y);//eu que botei esse System.out por conta propria
    }        
}
java Static:
C:\>java Static -1 0 3
ricardo13

olá,

muito obrigado pela sua resposta…

Mas dexa eu ver se entendi…

a expressão “y = x++ + ++x;” a soma entre “0 + 0 = 0” o x vai ser igual a 0 por causa do ++x …depois de feita a expressão inteira, ae o x vai ser igual a 1 por causa do x++ …

ok ??

Ricardo

maior_abandonado

ricardo13:
olá,

muito obrigado pela sua resposta…

Mas dexa eu ver se entendi…

a expressão “y = x++ + ++x;” a soma entre “0 + 0 = 0” o x vai ser igual a 0 por causa do ++x …depois de feita a expressão inteira, ae o x vai ser igual a 1 por causa do x++ …

ok ??

Ricardo

é meio complicado de entender o q vc ta falando, então disconfio q deve ser complicado de entender o q eu tava falando tb…rsrs

mais é isso mesmo q vc disse (ou ao menos q euintendi)… o x estava valendo -1, ai por causa do ++x ele vai valer 0, e depois disso será feita a conta, e depois vai incrementar por causa do x++, valendo 1… (e nas contas posteriores o x vai i valendo um, sendo sujeito aos outros incrementos e etc…)

ricardo13

olá ,

entendi perfeitamente bem oq vc quis dizer…

Muito Obrigado

Ricardo

Criado 21 de novembro de 2008
Ultima resposta 22 de nov. de 2008
Respostas 9
Participantes 7