Melhor resposta
Uh, eles são conceitos totalmente diferentes.
Um membro marcado como estático pertence à classe, em vez de a qualquer instância particular. Às vezes, as classes podem ter apenas membros estáticos, com um exemplo óbvio sendo a classe java.lang.Double que “caixas” primitivas duplas: você pode obter o valor de um duplo individual por meio de um método de instância (myDouble.doubleValue()
) mas obter coisas “universais” por meio de membros estáticos (Double.MAX\_VALUE
).
Um membro marcado como final não pode * ter seu valor (que é seu valor se primitivo, ou sua referência se objeto) mudou uma vez inicializado. Você ainda pode ser capaz de alterar as propriedades de um objeto (pode ser mutável ) mas você não poderia * substituir o objeto por outro. (* Você pode tecnicamente “trapacear” com reflexão, manipulação de bytecode ou outras maneiras de “quebrar as regras”, mas se você fizer isso, provavelmente sabe você re “trapaceando”.)
Resposta
Para saber quando usar
private static final X x;
Você deve saber qual é o uso dessas palavras-chave.
Vamos ver
- privado – É usado quando você deseja restringir determinado membro de uma classe a não seja acessível fora dessa classe.
- static – Quando você declara qualquer membro estático, ele é vinculado à sua classe e não a um objeto. Para simplificar, o membro estático será inicializado quando a classe for carregada. Portanto, sempre que você atualizar o valor daquele membro, todos os locais onde ele é referenciado também serão atualizados. Portanto, os membros estáticos são acessados pelo nome da classe e não seus objetos, pois o valor do membro permanecerá o mesmo, independentemente dos objetos.
- final – Esta palavra-chave, quando usada com variáveis de membro, define que uma vez que a classe é carregada e o valor é atribuído, ele não pode ser alterado.
Então, vamos ver o que acontece quando você declara uma variável como abaixo:
private static final String PRIVATE\_STATIC\_FINAL\_STRING = "String";
Agora,
PRIVATE\_STATIC\_FINAL\_STRING é definido como privado, então ganhou “t estar acessível fora de sua classe declarativa. Também é definido como estático, portanto, seu valor permanecerá o mesmo, independentemente dos objetos de sua classe. E é definido como final, portanto, uma vez que a classe é carregada, seu valor não será alterado.
Portanto, PRIVATE\_STATIC\_FINAL\_STRING funcionará como uma string de nível de classe não modificável que não estará acessível fora de sua classe declarante.
Espero que isso ajude a esclarecer suas dúvidas. Se precisar de mais ajuda, você pode entrar em contato comigo e eu tentarei ajudá-lo o máximo que puder.
Boa sorte e bom aprendizado!