dúvida sobre certificação

10 respostas
camillabrasilia
public class Teste { 
   
   static { 
	  System.out.println("Imprimir static"); 
   } 

   public static void main(String[] args) { 
   } 
}

A classe acima irá imprimir: “Imprimir static”

Dúvidas:

  • O static neste caso será um método?
  • Como o “static” foi chamado pelo método main()?

Agradeço a todos que poderem me ajudar.

10 Respostas

Luca

Olá

Se você disassemblar (não existe esta palavra horrível, mas não lembrei de outra) uma classe Java, vai ver que este bloco de inicialização fica em um método chamado <clinit>. Este método não pode ser usado por nós programadores, é um método para inicialização dos campos estáticos e dos blocos estáticos. Ele é usado na primeira vez que uma classe é instanciada e é a primeira coisa que acontece, antes mesmo do construtor de uma instância.

Se falei abobrinha, me corrijam.

[]s
Luca

brlima

portanto static , nesse caso, é um método ? Chamado pela tal clinit ?

Luca

Olá

Bruno, nananinanão!

Static é um trecho de código que é executado pelo tal de <clinit> que também inicializa os campos estáticos.

É semelhante ao que acontece nos construtores de instâncias que “colocam os campos dentro do construtor” logo após as chamadas super(). “Colocam” entre aspas porque na verdade os construtores executam os trechos de código que contém os campos (não estáticos) e também aqueles raramente utilizados inicializadores de instância (trechos de código entre {}, fora dos métodos e sem serem estáticos).

[]s
Luca

brlima

Ahhh! Entendido!! :smiley:
Entao esse pedaço de codigo foi delcarado como static, entao ele é executado (inicializado) juntamento com os outros objetos staticos da classe…

Hm… Valeu!! hehehehe

Ironlynx

É isso aí Luca!
camillabrasilia e brlima,dêem uma bisoiada aqui(item2.17.4-5):
http://java.sun.com/docs/books/vmspec/2nd-edition/html/Concepts.doc.html#19075

e aqui(12.3.1):
http://java.sun.com/docs/books/jls/second_edition/html/execution.doc.html#46634

Rafael_Steil

Chame de “bloco estatico”…

Rafael

brlima

Valeu pelo link Iron…
Toda essa regrinha de inicialização to ateh familiarizado… so nunca tinha visto esse tipo de inicialização, como vc disse Rafael, “bloco estatico”…

Camilinha, valeu por essa duvida que eu nunca ia descobrir que tinha :smiley: rssss

Abraços.

Rafael_Steil

http://www.google.com/search?q=java+static+blocks

Rafael

camillabrasilia

Valeu gente.

L

Desculpem minha ignorância…mas foi explicado onde a classe é instanciada para o bloco estático ser executado…se dentro do método main não tem nada?

Valews

Criado 10 de fevereiro de 2004
Ultima resposta 13 de fev. de 2004
Respostas 10
Participantes 6