3.1.7 Variáveis de Classe e Instância As variáveis de uma classe podem ser de instância ou de classe. Cada classe possui as suas próprias cópias das variáveis de instância, enquanto que as variáveis de classe são compartilhadas. Alan Santos
3.1.7 Variáveis de Classe e Instância Altere a classe ContaCorrente acrescentando a variável de classe dinheiroTotal, para guardar o somatório dos saldos de todas as contas. Alan Santos
3.1.7 Variáveis de Classe e Instância class ContaCorrente { static float dinheiroTotal; float saldo; String nome; float verificaSaldo ( ) { return saldo; } void depositaValor (float valor) { saldo = saldo + valor; dinheiroTotal += valor; void retiraValor (float valor) { if (saldo>=valor) { saldo = saldo – valor; dinheiroTotal -= valor; Alan Santos
3.1.7 Variáveis de Classe e Instância Cada instância da classe ContaCorrente (objeto) terá as mesmas variáveis (saldo e nome), porém, elas podem ter valores diferentes em cada instância. A variável de classe (dinheiroTotal), porém, é compartilhada por todos os objetos. Por isso, possui o mesmo valor para todos os objetos e se um objeto modificar o seu valor, o novo valor é visto por todos os outros objetos. Alan Santos
3.1.7 Variáveis de Classe e Instância Múltiplas instâncias de uma classe Alan Santos
3.1.7 Variáveis de Classe e Instância Membros static Definem membros da classe Não existem em cada objeto Pode ser aplicado a atributos e métodos Podem ser acessados por objetos Não é necessário criar objeto, pode-se acessar diretamente da classe NomeClasse.membro Alan Santos
3.1.7 Variáveis de Classe e Instância Nome do projeto: poligonos public class ImprimirStrings { 1 String str = “atributo-nao-estatico”; 2 public void imprimir() { 3 String a = new String(“abcdef”); 4 String b = new String(“xyz”); 5 System.out.println(a.concat(b)); 6 } 7 public static void main(String[] args) { 8 imprimir(); 9 } 10 } Alan Santos
3.1.7 Variáveis de Classe e Instância O compilador acusa o seguinte erro na linha 9: non-static method imprimir() cannot be referenced from static context. Por que isso acontece? Um método de classe não pode chamar um método de instância, pois não há objeto instanciado. Alan Santos
3.1.7 Variáveis de Classe e Instância Se fizermos referência ao atributo não-estático ‘str’ no método main ou no imprimir obtermos o seguinte erro de compilação: non-static variable str cannot be referenced from static context. Por que isso acontece? Métodos estáticos NÃO acessam variáveis de instância Métodos estáticos SÓ acessam variáveis estáticas e/ou declaradas no corpo do método Alan Santos
3.1.7 Variáveis de Classe e Instância Resumindo: Métodos e atributos não-estáticos não podem ser referenciados em contextos estáticos. Alan Santos
3.1.7 Variáveis de Classe e Instância 1 public class Circulo { 2 static final double PI = 3.14159; 3 public static double calculaArea(double raio) { 4 return PI * ( raio * raio ); 5 } 6 } 7 // um método qualquer // utilizamos o nome da classe 10 double areaCirculo = Circulo.calculaArea(5); Alan Santos
3.1.7 Variáveis de Classe e Instância Não devemos abusar de métodos estáticos porque um programa que utiliza somente métodos de classe não é orientado a objetos (não há objetos) Alan Santos