Caros Colegas quero que avaliem, pois sobre atributos estáticos entendi assim.
nbluis
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?
Deh
Porque os blocos de inicialização são executados na ordem em que se encontram no código fonte.
Não seria isso?
L
lfpolli
Deve ser porque as chamadas são executadas sequencialmente, roda o Debug e ve a ordem de execução.
nbluis
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.
ViniGodoy
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.
T
takeshi10
A inicialização ocorre de cima para baixo, na ordem em que aparecem
public class Car {
static {
name = "MyCar";
}
static String name;
public static void main(String[] args) {
System.out.println(Car.name);
}
}
a razao por este trecho funcionar eh que static String name; 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
nbluis
Muito bom takeshi10 e ViniGodoy.
Vale para lembrarmos o cuidado que temos que ter ao utilizar estas atribuições.
Valeu mesmo.
jPscoralicK
agora me surgiu uma dúvida:
static{// código}
as chaves são necessárias sempre que eu inicializar uma variável static?
T
takeshi10
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