Cursos / Informática para Internet / Programação Orientada a Objetos / Aula

arrow_back Aula 13 - Atributos e Métodos Estáticos, Classes Abstratas e Interfaces

Atributos Estáticos

Primeiramente, vejamos essa denominação: “atributo estático”. Nas aulas anteriores, abordamos de forma exaustiva o conceito de atributos, os quais são variáveis declarados nas classes, e que possuem tipo e nome. Você viu também que os valores dos atributos são definidos pelos próprios objetos instanciados de uma dada classe. Essa atribuição pode ocorrer de forma direta (caso o atributo seja público), ou através de métodos setters que permitem acessá-los (que é o caso dos atributos que são privados), ou mesmo através dos próprios construtores da classe.

Até aí, nenhuma novidade, correto?

Agora, vejamos a denominação “estático”. O que você compreende por esse termo? Algo imóvel, imutável, paralisado?

Pois bem, é aí que “mora o perigo”, pois o termo escolhido para tal variável não foi tão adequado, e dá tipicamente a ideia de uma constante.

Atributo Estático ≠ Atributo Constante

A ideia por trás do conceito de atributos e métodos estáticos é a de que objetos de uma mesma classe podem e, em algumas situações devem, compartilhar valores em comum, caso contrário, teríamos que criar atributos que precisariam ser atualizados todos ao mesmo tempo, em cada objeto criado.

Vejamos o seguinte exemplo. Um sistema que controle relógios de ponto de várias filiais com o mesmo fuso horário, nessa situação, quando tivermos que fazer um ajuste ou atualizar a hora, minutos e segundos, teremos que fazê-lo em todos os relógios. Porém, se esse atributo não “pertencer” aos objetos, e sim à própria classe, todos saberão a hora certa, pois se baseiam no mesmo valor. Observe na Listagem 1 o código da classe RelogioPonto.

Listagem 1 - Classe RelogioPonto

Veja o uso da palavra reservada static na declaração dos atributos hora, minuto e segundo. Essa faz com que o compilador entenda que não será necessário reservar um espaço de memória em cada objeto da classeRelogioPonto para armazenar o valor da hora, minuto e segundo, pois esses valores serão compartilhados por todos os objetos dessa classe. Logo, será necessário apenas um único espaço para armazenar esse valor, juntamente com os códigos dos métodos da classe.

Vamos criar uma aplicação simples para exemplificar o uso dos atributos estáticos hora, minuto e segundo. A Listagem 2 apresenta o código de tal aplicação.

Listagem 2 - Aplicação usando a classe RelogioPonto

Observe que criamos 3 (três) objetos RelogioPonto e na sequência pegamos um desses (filialAlecrim) para atribuir os valores de hora, minuto e segundo. Logo, em seguida, imprimimos os valores dos três objetos e teremos o seguinte resultado:

Isso ocorre, pois, quando atribuímos valores a variáveis estáticas através de um objeto, estamos atribuindo o valor para todos os objetos da mesma classe. Por isso, alguns chamam os atributos estáticos de atributos de classe. Para não sermos redundantes, faremos uma substituição da instrução.

De...

Para...

Pois, quando estamos tratando de atributos de classe (atributos estáticos) em Java, é comum e é uma boa prática usarmos o seu valor utilizando o nome da classe seguido do operador ponto “.” e o atributo que desejarmos.

Observe que, com essa mudança, mostramos que não é necessário criar um objeto da classe RelogioPonto para que se possa acessar seus atributos estáticos. Quando estáticos, eles estão disponíveis antes mesmo de se criar o objeto.

Com isso, temos como análise geral o seguinte quadro:

Atributo Estático = Atributo Comum ou Compartilhado

Versão 5.3 - Todos os Direitos reservados