//Exemplo 1
//FazQualquerCoisa() é static
ClasseA.FazQualquerCoisa();
//Exemplo 2
ClasseA clA = new ClasseA();
//FazQualquerCoisa() é static
clA.FazQualquerCoisa();
Pelo que andei estudando no Exemplo 1 também estou criando um objeto. A única diferença é que no Exemplo 2 eu crio um objeto com referência direta (Com um nome para chamá-lo).
É correto afirmar que: Se eu fizer 2 chamadas como no Exemplo 1 em uma mesma ClasseX estarei criando 2 objetos estaticos implicitamente, objetos estes que ficariam alocadas na memoria por serem static e por consequencia disso não seriam coletadas pelo Garbage Colector certo?
Usando o Exemplo2 ao acessar 2 vezes o metodo estatico da ClasseA, eu estaria criando um unico objeto não estatico e desta forma ele seria removido pelo Garbage Colector?
O meu receio em usar o exemplo 1 era porque eu pensava estar criando um objeto implicitamente a cada chamada e desta forma aumentar loucamente o consumo de memoria. Mas pelo que entendi mesmo se eu chamar 10 vezes o exemplo 1 não estarei criando novos objetos na memoria né? E o exemplo 1 é a maneira certa de se acessar metodos static certo?
O NetBeans até deixa um sinalzinho de aviso quando você usa um objeto pra chamar um método estático, dai clicando nele ele conserta pra você substituindo o objeto pelo nome da classe.
Sempre use static para todos os métodos que não tem nenhum acesso a classe que eles pertencem, ou seja se algum método não usar variáveis membro ou outros métodos não estáticos, coloca um static nele sem medo =]
Em C++ existe um tipo chamado const (read only) que serve pra identificar variáveis que não serão alteradas durante a execução de um método, não sei se existe algo semelhante em java, mas ajuda bastante…