[quote=AbelBueno]Não sou um especialista em como a VM armazena os objetos em memória, mas ainda assim gostaria de dar minha opinião sobre o assunto.
Para mim, a princípio, o uso de memória de acordo com cada modificador simplesmente não importa.
O motivo para você escolher qual modificador usar, deve ser o que faz mais sentido para aquele atributo.
O consumo de memória e questões de performance são melhorados a cada versão. A não ser que tenha um problema real de performance, deveria desconsiderar isto.
Acredito então, que os usos seriam:
private - o valor só interessa, ou pode ser acessado, pela própria classe
final - o valor será definido uma vez e não será alterado em tempo de execução (tipicamente uma constante).
static - o valor será compartilhado por todas instâncias OU (principalmente, na minha opinião) o valor não depende de uma instância
Imagino que o static seja o único que precise de uma argumentação mais profunda.
Supondo, de forma bem simplista, uma classe Pessoa, que serviria de base pra cálculos de INSS e aposentadoria.
Queremos atributos para representar a expectativa de vida de uma pessoa e seu provável ano de falecimento (com base nessa expectativa).
Teríamos um código assim:
public class Pessoa {
private final static int EXPECTATIVA_VIDA = 70;
private final int provavelAnoFalecimento;
private String nome;
private Date dataNascimento;
public Pessoa(String nome, Date dataNascimento) {
this.nome = nome;
this.dataNascimento = dataNascimento;
provavelAnoFalecimento = calculaAnoFalecimento(); //omitido por simplicidade
}
}
Nesse caso, EXPECTATIVA_VIDA é static por ser o mesmo para todas pessoas e provavelAnoFalecimento apenas final pois depende de cada instância.
Estou postando minha opinião, pois vi que penderam mais para o lado técnico (consumo de memória, performance) e deixaram de lado a questão de organização do código, legibilidade, expressar intenções.
[/quote]
Perfeito Abel… a conversa pendeu pra esse lado porque foi intrigante mesmo a questão técnica envolvida… ainda nem sei se resolveu, mas sua colocação foi perfeita, principalmente que isso é uma regra “SEMPRE QUE POSSìVEL EVITE USAR STATIC”…
Abs []