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 ?