dúvida sobre certificação

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.

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

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

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

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

É 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

Chame de “bloco estatico”…

Rafael

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.

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

Rafael

Valeu gente.

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