Métodos static

Galera surgiu mais uma dúvida. Veja só:

//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?

Seu pensamento está correto.

Jovem,

Quando vc acessa um método static, não há “objeto”!!
Métodos estáticos são dá Classe, e não de uma instância específica(objeto)

A diferença entre:

MinhaClasse.metodoEstatico();

e

MinhaClasse obj = new MinhaClasse().
oj.metodoEstatico();

É que após compilado ele referencia a “Classe” e não o objeto, isso é apenas um atalho!

Métodos/Atributos Static são carregados apenas uma vez pela JVM!!
Complementando, se não for usar o “objeto” chame direto pela Classe.

[quote=josimarsis]Galera surgiu mais uma dúvida. Veja só:

//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.

[/quote]

Não, não está.
Essa é a diferença.

As boas práticas pedem que vc invoque métodos estáticos diretamente no nome da classe.
Use a primeira forma sempre e a segunda nunca.

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?

Exatamente!

ClassName.myMethod();

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…

Abraço.!

Em algumas linguagens, você nem consegue chamar um método de classe (estático) a partir de uma instância.

Obrigado galera agora entendi. Valeu