Metodos static e a memoria

8 respostas
Rafael_Steil

Bom, metodos e propriedades declarados como “static” sao comuns a todas instancias de determinado objeto, ou seja, ha apenas uma referencia na memoria independentemente da quantidades de objetos criados.

A duvida eh: isso reduz o consumo de memoria, “otimiza” o programa? por exemplo, digamos que eu tenha os metodos “void escreve(), int retornaMultiplicacao(int, int)” e a propriedade “String nomeDaClasse”. Nao vejo uma razao para nao declarar tais como static, ja que nao dependem de algo que mude de objeto para objeto. Dessa forma, se eu tiver 4 referencias para objetos da classe X, teria apenas uma referencia para os metodos 'escreve, retornaMultiplicacao" e uma referencia para “nomeDaClasse” na memoria.
Ta certo essa minha colocacao?

Se estiver, entao eh recomendavel declarar tudo o que foi possivel como static?

Rafael

8 Respostas

Paulo_Silveira

As chamadas de método static são MUITO mais rápidas que as não static. Porque? Porque eles sao resolvidos em tempo re compilacao, e nao de execucao!

Tipo

Object o = new String(“paulo”);
System.out.println(o.toString());

Aqui, a resposta será “paulo”, e não “java.lang.Object@1df47a”. Porque? Porque eh feita uma chamada de metodo virtual, ele chama o toString da verdadeira classe do objeto.

Agora, experiemente fazer isso para um metodo estatico. O metodo chamado seria o da classe Object, e nao da String.

Essa procura do metodo que ele deve chamar, eh LENTA em java. Tipo, nao muito lenta, mas consome tempo. Por isso metodos estaticos sao muito mais rapidos na chamada.

Usa sempre metodos estaticos? Nunca. Dessa maneira voce estaria perdendo o bem mais valioso do java, a orientacao a objetos.

Voce quer deixar seus metodos da sua classe sendo executado mais rapidamente? Declare a classe final! Porque? Porque assim o java fica esperto, e nao precisa procurar que metodo chamar, ja que ele sabe que aquela classe nao tem subclasses! Louco neh?

Rafael_Steil

Bom, mas ainda fica uma duvida: quando eh conveniente declarar como static e quando nao? ( tirando as respostas obvias como compartilhar recursos )…

Paulo_Silveira

Usa static quando a chamada de metodo que voce for fazer, nao envolve nenhuma instancia da classe que voce quer colcoar o metodo static

melhor: quando voce eprcebe que aquele metodo poderia estar em qualquer outra classe!

aconstantino

utilizar static em varíaveis
somente em variáveis globais

Paulo_Silveira

“blackhat”:
utilizar static em varíaveis
somente em variáveis globais

Nao eh bem assim :slight_smile:
Pode ter uma variavel staic que seja private. Static na eh utilizado apenas para “emular” variaveis globais.

Sem contar os metodos estaticos.

aconstantino

Acho que é inútil declarar uma variável static como private ja que static normalmente é chamado Classe.ALGUMACOISASTATIC ou até mesmo um método.

Rafael_Steil

Inutil nao eh. Considere isso:

// ....
private static int contador = 0;
// ....
public static int getNextValue()
{
    return contador++;
}
// ...

dessa maneira vc nao pode acessar “contador” diretamente, mas garante que todas as intstancias da classe vao compartilhar a mesma variavel entre si.

Rafael

Paulo_Silveira

exatamente

alias, tem gente que programa sem NUNCA escrever uma variavel PUBLIC, soh metodos…

outra coisa, para voce fazer um SINGLETON, precisa de um provate static

a hora certa de vc escrever um public static eh pra constantes, ai viria um final tambem

Criado 22 de setembro de 2002
Ultima resposta 22 de set. de 2002
Respostas 8
Participantes 3