Dúvida sobre métodos e atributos static

Bom, na classe HibernateUtil temos um atributo SessionFactory static, isso faz com que sempre que minha aplicação for inicializada este atributo será inicializado mesmo que não seja chamado ? O mesmo acontece para métodos static ?

Uma propriedade estática é alimentada no momento em que classe é carregada na memória.
Método estático quer dizer que vc não precisa instanciar a classe para usar o mesmo.

Static é um atributo que “não reseta” ao iniciar um novo objeto, não é instanciado.

[code]public class TestEstaticoFuncionario {
static int numeroDeFuncionarios = 0;
int valorQualquer = 0;
public TestEstaticoFuncionario(){
numeroDeFuncionarios++;
}
public void adicionarValorQualquer(){
valorQualquer++;
}
public void imprimir(){
System.out.println("Numero de funcionarios: " + numeroDeFuncionarios);
System.out.println("Valor qualquer: " + valorQualquer);
}

public static void main(String[] args) {
	TestEstaticoFuncionario joao = new TestEstaticoFuncionario();
	joao.adicionarValorQualquer();
	joao.imprimir();
	TestEstaticoFuncionario pedro = new TestEstaticoFuncionario();
	pedro.imprimir();
}

}[/code]
Saída:

Numero de funcionarios: 1 Valor qualquer: 1 Numero de funcionarios: 2 Valor qualquer: 0

Perceba que o “valorQualquer” ao iniciar um novo objeto ele reseta para o “valorQualquer = 0”. Já o “numeroDeFuncionarios” é definido como 0 apenas 1 vez, então, os demais objetos teram o valor “não-resetado”.

Acho que deu pra entender :s

Isso significa que o atributo não pertence a qualquer instância criada da Classe.

Ele pertence a Classe e é comum a todos os objetos da Classe.

serve também para métodos estáticos.

e como o atributo é privado a chamada deve ser pelo método:

HibernateUtil.getSessionFactory() // método estático pertence a classe HibernateUtil

em vez de:

     HibernateUtil hu = new HibernateUtil();
     hu.getSessionFactory();  // método NÃO estático pertence a instância hu

Não sei se era essa a sua dúvida.

Bom, então quer dizer que independente de a classe ser ou não instanciada, se tiver um atributo estático nela, ele será inicializado no inicio da aplicação, certo ?

É por isso que o HibernateUtil tem que ter um atributo SessionFactory estático ?