[quote=danilocsf][quote=danilocsf][quote=Balena]
O final é imutável, e eu posso querer alterar o valor da variável static.
[/quote]
Exatamente … e pq ter uma variavel private final e static , se é imutavel? Não seria apenas uma coisa a mais na memória ao carregar a aplicação? [/quote]
É nesse ponto que estou querendo chegar, pois até hoje eu só adotei como ‘padrão’ mas nunca entendi o porque…
Em que situação se deve utilizar a combinação private static final e qual situação se deve utilizar private final , sendo que o valor é imutável ?
Isso não acarreta apenas um maior consumo de memória? Imagine centenas de classes que possuem dezenas de variáveis private static final, será que não poderia ser apenas private final?
É exatamente isso que não entrou na minha cabeça ainda.
Pode haver 1000 instância de uma classe, mas pq uma constante estática declarada nessa classe? [/quote]
Porquê se você usar private final, o consumo de memória será = 1000 X variavel.
Usando private static final, o consumo de memória será = variavel.
Vou dar alguns exemplos para ilustrar:
Você possui a classe Padeiro, onde o sindicato deles é igual para todos os objetos.
Aí você pode usar public static final… beleza? O sindicato é uma informação que pode ser visualizada em outras partes da aplicação e pode ser necessária na impressão de fichas de cadastro, etc…
Você têm a classe RemuneracaoPadeiro
Nela, você têm uma varíavel de base salarial que seja igual para todos os funcionários.
Mas para você não é interessante que a base salarial seja visível no resto do programa. Para que deixar isso visível se o programa só quer obter o cálculo do salário do cara e pronto. A forma que esse cálculo vai ser feito pouco importa para o resto da aplicação… A aplicação é cliente dessa classe, como cliente só importa a obtenção do resultado (sem que seja visível detalhes da implantação)…
E se eu usar private final para essa varíavel, se houverem 1000 objetos RemuneracaoPadeiro ele vai consumir 1000 vezes mais memória para essa varíavel (vão ter 1000 cópias dela na memória).
É o mesmo que você ser cliente de uma empresa e ao comprar um produto, ela te informar na nota: o centro de distribuição, quanto foi pago de imposto na fonte, qual foi a transportadora que fez a entrega, o horário que o produto foi entregue na loja, quanto foi o preço de atacado que a loja pagou, quanto custou a embalagem do produto, etc etc… O private é usado para ocultar de quem faz uso da classe, todos os detalhes da implementação.
O escopo que você vai usar para a variável segue a definição do uso da varíavel:
- Essa varíavel deve ser enxergada fora do contexto da classe? É necessário para o resto da aplicação conhecer essa variável??
Sim - Uso public
Não - Uso private
- A variável deve ser a mesma para todos os objetos da mesma classe?
Sim - Uso static
Não - Não uso static
- A variável é imutável (ou só é mudada sazonalmente via alteração no código fonte)?
Sim - Uso final
Não - Não uso final