O operador new da classe B será executado apenas quando for chamado pelo método main da classe A!
O bloco estatico é executado logo que esta classe é carregada pela VM! independente se vc esta instanciando um Objeto da classe B ou não naquele momento!
O Objeto “Long” será carregado também quando a VM for iniciada! independente também de ter algum objeto de B instanciado!
Se eu intendi bem sua pergunta isso acredito que responde! mas qualquer coisa da um toke ai…
D
darkseidPJ
entao, na hora q eu der um
java meuPrograma
os estáticos serao inicializados, e depois os não estaticos?
S
sensPJ
Exatamente!!
inclusive aquele bloco estatico que vc colocou sera impresso na tela na hora que esta carregando seu programa e em mais nenhum momento ele será executado! não intereça quantos objetos vc instancia daquela classe!
Lembre-se: o que é estatico pertence a classe e não aos objetos desta classe!
D
darkseidPJ
Pode crer, a minha duvida era se o estático ira executar na hora q o programa fosse rodado, ou na primeira vez em q fosse preciso…
S
SchuenemannPJ
"sens":
O bloco estatico é executado logo que esta classe é carregada pela VM! independente se vc esta instanciando um Objeto da classe B ou não naquele momento!
O bloco só é executado quando for criada uma instância da classe, e será executado somente uma vez. E acredito que isso serve para os atributos também, pois não faz sentido carregar todos os atributos static de todas as classes de java.lang.
Faça o teste:
classA{publicstaticvoidmain(String[]args){Bx;// = new B(); --> Imprimiria "b".System.out.println("a");}}classB{static{System.out.println("b");}}
Só mais uma coisa: esse main da classe A do darkseid não tem o String como argumento, então é só um método normal de nome main :)
D
darkseidPJ
oloko… esqueci do String… hehehe foi malz, mas a idéia era criar um main mesmo, e nao um metodo comum de nome main
S
sensPJ
O bloco só é executado quando for criada uma instância da classe, e será executado somente uma vez. E acredito que isso serve para os atributos também, pois não faz sentido carregar todos os atributos static de todas as classes de java.lang.
Reafirmo o que eu falei anteriormente! Um bloco estatico é executado apenas quando a classe é carregada pela VM! o que acontece neste exemplo é que a VM carrega a classe “B” apenas quando ela precisa utilizar, e por isto se não for utilizado (a classe “B”) o bloco estatico dela não aparece( pois nem é carregada pela VM).
Neste caso não tem nenhuma instancia de “B” sendo criada! mas a classe tem que ser carregada! sendo assim o bloco estatico irá ser executado tb! Ele executa apenas uma vez! mas quando a classe é carregada pela VM !
[]s Victor
F
fabiostbPJ
concordo com o sens, não é preciso que a classe seja estanciada para q seus membros estáticos sejam executados e/ou inicializados, basta que essa classe seja eleita pela JVM a ser carregada, apartir daí todos o membros staticos serão realizados, uma única vez!
A necessidade de estanciação para inicializar e/ou executar valem para membros de instancias!
S
SchuenemannPJ
Eu concordo também, mas me expressei muito mal.
Quando você disse isso:
achei que você quis dizer que seriam carregados todos os membros estáticos de todas as classes importadas, independentes de serem usados ou não.
Agora entendi o que quis dizer.
F
fmartinsPJ
classA () //NAO COMPILA , Nao existe parenteses na declaracao de classes
{ publicA() {} publicstaticvoidmain() { Bb = newB();
}
}
rsssssssss ... oh la einh .. antes de mais nada no exame .. temos q verificar essas coisitas!!! sei q isso naum foi o objetivo deste topico!
Os blocos, atributos , metodos , innerclass ESTATICOS de uma classe sao colocados em um repositorio da JVM, chamada de Classes Pre Loaders,quando a mesma é compilada, entao esse
lugar eh responsavel por controlar tudo q eh estatico ... logo .. quando vc acessa um membro estatico de uma classe, ele ira nesse lugar da JVM, procurar o tal ...