Duvida STATIC [Alguém se arrisca?]  XML
Índice dos Fóruns » Java Avançado
Autor Mensagem
nbluis
GUJ Master
[Avatar]

Membro desde: 27/05/2006 01:31:51
Mensagens: 1531
Localização: Porto Alegre - RS
Offline

Ai pessoal;

Seguinte, se alguém conseguir explicar por favor.

Olhem o seguinte código.

No retorno sai "MyCar";

Porém quando troco a ordem do atributo e do bloco estático a saída é outra.
Exemplo

No retorno sai "NULL";

Tem mais uma, se eu não inicializar o atributo name dai sempre sai MyCar
Assim

Mesmo trocando a ordem, sempre sai "Mycar".

Alguem tem idéia?


Luis Eduardo Bohrer

Any fool can write code that a computer can understand. Good programmers write code that humans can understand.
[WWW]
nbluis
GUJ Master
[Avatar]

Membro desde: 27/05/2006 01:31:51
Mensagens: 1531
Localização: Porto Alegre - RS
Offline

Ninguém?

Luis Eduardo Bohrer

Any fool can write code that a computer can understand. Good programmers write code that humans can understand.
[WWW]
Daniel Ilha
JavaBaby

Membro desde: 23/06/2006 11:42:08
Mensagens: 79
Localização: Porto Alegre
Offline

Bem, não tenho ainda experiência, mas pelo que entendi é que atributos estáticos são compartilhados por toda as instâncias da classe, sendo assim ele irá mostrar a última referência feita a ele.
Ex:
public class Tv{
public static String marca = null;
}

public class TestTv{
public static void main(String[] args){
Tv t1 = new Tv();
Tv t2 = new tv();
System.out.println(t1.marca);//mostra null
System.out.println(t2.marca);//mostra null
t1.marca = "LG";
System.out.println(t1.marca);//mostra LG
t2.marca = "CCE";
System.out.println(t2.marca);//mostra CCE
System.out.println(t1.marca);//mostra CCe
}
}

Caros Colegas quero que avaliem, pois sobre atributos estáticos entendi assim.
nbluis
GUJ Master
[Avatar]

Membro desde: 27/05/2006 01:31:51
Mensagens: 1531
Localização: Porto Alegre - RS
Offline

Como funcionam atributos e blocos estáticos eu sei, a dúvida é outra.

Por que diabos muda o resultado caso eu troque as chamadas de lugar?

Mais alguém?

Luis Eduardo Bohrer

Any fool can write code that a computer can understand. Good programmers write code that humans can understand.
[WWW]
Deh
JavaGuru
[Avatar]

Membro desde: 18/04/2006 23:02:24
Mensagens: 244
Localização: Florianópolis - SC
Offline

Porque os blocos de inicialização são executados na ordem em que se encontram no código fonte.

Não seria isso?
lfpolli
JavaBaby

Membro desde: 04/05/2007 09:20:23
Mensagens: 87
Localização: Curitiba
Offline

Deve ser porque as chamadas são executadas sequencialmente, roda o Debug e ve a ordem de execução.
nbluis
GUJ Master
[Avatar]

Membro desde: 27/05/2006 01:31:51
Mensagens: 1531
Localização: Porto Alegre - RS
Offline

Não tenho como pegar a hora da criação de um atributo da classe no debug.
O máximo que chego é a atribuição do atributo feita dentro do bloco estático.

Outra, se fosse isso mesmo, não faria diferença alguma se eu inicializasse a variável ou não, mas como eu disse acima, se a variável tiver um valor acontece uma coisa senão acontece outra.

Coisa bizarra.

Luis Eduardo Bohrer

Any fool can write code that a computer can understand. Good programmers write code that humans can understand.
[WWW]
ViniGodoy
Moderador
[Avatar]

Membro desde: 11/12/2006 08:22:01
Mensagens: 20580
Localização: Curitiba/PR
Offline

O fato é que essas inicializações são tão complexas que nem a Sun se entendeu direito ainda.

Mas, aparentemente está respeitando a ordem em que aparece. E, sempre priorizando uma atribuição de valor.

@ViniGodoy - Lattes

Tem dúvidas de Java? Poste no fórum! Não respondo dúvidas de java via MP!

Ponto V! - Desenvolvimento de Jogos Profissional - @Pontov - Facebook
Projeto Towel - Swing de uma forma inteligente (Novo lar do ObjectTableModel e do Auto-Filtro).

Ei... você está usando DefaultTableModel no seu projeto??
Não faça isso! Veja: http://www.guj.com.br/posts/list/15/199067.java#1001295
[WWW]
takeshi10
Java Ninja

Membro desde: 08/08/2004 23:05:25
Mensagens: 254
Localização: Brasil
Offline

A inicialização ocorre de cima para baixo, na ordem em que aparecem



a razao por este trecho funcionar eh que não é uma instrucao e sim uma declaracao... vale lembrar que as inicializações ( name = null, por exemplo) se tornam no bytecode algo como


para variaveis estaticas, e sao inseridas nos construtores para variaveis de instancia

takeshi
nbluis
GUJ Master
[Avatar]

Membro desde: 27/05/2006 01:31:51
Mensagens: 1531
Localização: Porto Alegre - RS
Offline

Muito bom takeshi10 e ViniGodoy.

Vale para lembrarmos o cuidado que temos que ter ao utilizar estas atribuições.

Valeu mesmo.

Luis Eduardo Bohrer

Any fool can write code that a computer can understand. Good programmers write code that humans can understand.
[WWW]
jPscoralicK
JavaChild
[Avatar]

Membro desde: 05/05/2007 09:54:44
Mensagens: 128
Localização: Juiz de Fora, MG
Offline

agora me surgiu uma dúvida:



as chaves são necessárias sempre que eu inicializar uma variável static?

João Paulo Scoralick
Ciência da Computação - UFJF/MG
http://anouterview.blogspot.com
http://escape13.blogspot.com

[WWW] [MSN] [ICQ]
takeshi10
Java Ninja

Membro desde: 08/08/2004 23:05:25
Mensagens: 254
Localização: Brasil
Offline

nao... as chaves sao usadas para delimitar um bloco de estatico... em um bloco estatico voce pode colocar codigo que sera executado durante o carregamento da classe, como, por exemplo, a inicializacao de alguma variavel estatica

takeshi
jPscoralicK
JavaChild
[Avatar]

Membro desde: 05/05/2007 09:54:44
Mensagens: 128
Localização: Juiz de Fora, MG
Offline

vlw

[ ]

João Paulo Scoralick
Ciência da Computação - UFJF/MG
http://anouterview.blogspot.com
http://escape13.blogspot.com

[WWW] [MSN] [ICQ]
 
Índice dos Fóruns » Java Avançado
Ir para:   
Powered by JForum 2.1.8 © JForum Team