Dúvida sobre métodos e atributos static

4 respostas
R

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 ?

4 Respostas

C

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.

V

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

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();
	}
}
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

A

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.

R

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 ?

Criado 21 de julho de 2013
Ultima resposta 21 de jul. de 2013
Respostas 4
Participantes 4