Modificadores O modificador static Prof. Artur Todeschini Crestani
Modificador static
O que pode ser static ? Variáveis Métodos Uma classe aninhada dentro de outra, mas não dentro de um método. Blocos de inicialização (SIERRA, 2006, p. 35).
O que não pode ser static ? Construtores (não faz sentido; os construtores somente são usado para criar instâncias de objetos). Classes (a não ser que estejam aninhadas) Interfaces Classes internas locais de métodos Métodos de classes internas e variáveis de instância Variáveis locais (SIERRA, 2006, p. 35).
Atributo static Quando temos um atributo estático em uma classe, este atributo será único para todos os objetos instanciados a partir desta classe; Atributos estáticos são inicializados com os mesmos valores de inicialização de atributos não estáticos; (SIERRA, 2006, p. 85).
Atributo static Os atributos estáticos podem ser acessados diretamente a partir da classe e são alocados na memória na primeira vez que a classe for referenciada. Portanto, não é preciso criar um instância. Sintaxe: NomeClasse . nomeAtributo Exemplo: Math .PI, Maht .E (SIERRA, 2006, p. 85).
Atributo static O clico de vida do atributo estático de uma classe, que é o mesmo da aplicação, isto é, enquanto a aplicação estiver rodando o atributo não será eliminado pelo GarbageCollector . O modificador static pode ser combinado com os modificadores de acesso (como * private , public ) em qualquer ordem, produzindo sempre o mesmo efeito. ( HORSTMANN, 2008, p. 64). * Veremos os modificadores private e public , mais adiante
Quando utilizar atributos estáticos? Atributos estáticos devem ser utilizados quando for necessário compartilhar um valor entre todas as instancias da classe. Desta forma, a variável será alocada apenas uma vez na memória.
Quando utilizar atributos estáticos? Vamos imaginar a classe Carro, contendo os seguintes atributos: fabricante: ? placa: ? velocidade: ? velocidadeMaximaPermitida : todos os carros devem obedecer a mesma velocidade máxima permitida esta característica se aplica a todas as instancias e pode ser definida como um atributo estático.
Métodos static Um método static tem o mesmo objetivo de um atributo estático, podendo ser chamado sem a necessidade de criação de um objeto. São denominados métodos de classe, em vez de métodos de instância. Exemplo: double p = Math . pow (2.0, 3.0);
Métodos static Um método static pode acessar somente membros (atributos e métodos) static porque, como já vimos, podem ser chamados sem a necessidade de criação de uma instancia da classe. São criados em classes para definir bibliotecas de funções que independem de atributos e métodos de instância. O exemplo mais comum de métodos estáticos é o main , porque a JVM não instancia um objeto da classe indicada para execução, ao invés disto, apenas chama seu método main . (SIERRA, 2006, p. 86).
Exemplo Logger . java Como podemos perceber, o valor de qdtLogs está sendo incrementado, mesmo quando utilizamos diferentes instancias de Logger para fazer as chamadas ao método logIt (). Isto acontece porque este atributo é estático e, portanto, compartilhado por todas as instancias classe.
Laboratório Todas as contas bancárias estão sujeitas à incidência do imposto CPMF. Trata-se do mesmo imposto para todas as contas. Vamos representar este imposto como um atributo estático da classe Conta Faca as seguintes modificações na classe Conta: a) acrescente um atributo: private static double taxaCPMF = 0.038d b) crie métodos get e set estáticos para o atributo taxaCPMF
Laboratório Agora vamos modificar a classe Conta para registrar individualmente em cada instância o CPMF acumulado nas operações de saque: a) acrescente o atributo private double acumuladorCPMF b) acrescente um método para acumular o CPMF private void acumuladorCPMF ( double valorSaque ) { acumuladorCPMF += taxaCPMF * valorSaque ; } c) modifique o método saque para que seja invocada a operação acumularCPMF d)crie o método público getCPMFAcumulado para retornar o acumuladorCPMF de uma Conta Execute o método main da classe TestaCPMF para testar as funcionalidade adicionadas.
Referencias Bibliográficas HORSTMANN, Cay; CORNEL, Gary Core Java Fundamentals v.1 , Sun Microsystem Press ed. 8 2008. SIERRA, Kathy. Certificação Sun para programador Java 5 Guia de estudo SCJP. e d. Alta Books, Rio de Janeiro, RJ 2006.