| Autor |
Mensagem |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 25/05/2007 19:39:28
|
nbluis
GUJ Master
![[Avatar]](/images/avatar/f0682320ccbbb1f1fb1e795de5e5639a.jpg)
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. |
|
|
 |
|
|
![[Post New]](/templates/default/images/icon_minipost_new.gif) 25/05/2007 20:13:33
|
nbluis
GUJ Master
![[Avatar]](/images/avatar/f0682320ccbbb1f1fb1e795de5e5639a.jpg)
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. |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 25/05/2007 20:18:29
|
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.
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 25/05/2007 20:21:37
|
nbluis
GUJ Master
![[Avatar]](/images/avatar/f0682320ccbbb1f1fb1e795de5e5639a.jpg)
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. |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 25/05/2007 20:23:24
|
Deh
JavaGuru
![[Avatar]](/images/avatar/bac4cbb6173335e862a1b3df635ee3ba.jpg)
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?
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 25/05/2007 20:26:05
|
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.
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 25/05/2007 20:30:33
|
nbluis
GUJ Master
![[Avatar]](/images/avatar/f0682320ccbbb1f1fb1e795de5e5639a.jpg)
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. |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 25/05/2007 21:10:48
|
ViniGodoy
Moderador
![[Avatar]](/images/avatar/1921493b5362e63fbe8983f4bd54157d.png)
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 |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 25/05/2007 21:49:06
|
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 |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 26/05/2007 18:00:12
|
nbluis
GUJ Master
![[Avatar]](/images/avatar/f0682320ccbbb1f1fb1e795de5e5639a.jpg)
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. |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 26/05/2007 20:08:36
|
jPscoralicK
JavaChild
![[Avatar]](/images/avatar/9b732cc38e40261d900b8008bf9c596e.jpg)
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
 |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 27/05/2007 02:46:18
|
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 |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 27/05/2007 13:43:32
|
jPscoralicK
JavaChild
![[Avatar]](/images/avatar/9b732cc38e40261d900b8008bf9c596e.jpg)
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
 |
|
|
 |
|
|