Metodos static e a memoria  XML
Índice dos Fóruns » Java Avançado
Autor Mensagem
Rafael Steil
Administrador
[Avatar]

Membro desde: 31/08/2002 02:35:53
Mensagens: 5984
Localização: São Paulo
Offline

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

"working code attracts people who want to code. Design documents attract people who want to talk about coding - Charles Miller"

http://rafaelsteil.com
http://twitter.com/rafaelsteil
http://www.jforum.net
http://www.flickr.com/photos/rafaelsteil
[Email] [WWW]
Paulo Silveira
Administrador
[Avatar]

Membro desde: 07/08/2002 18:38:50
Mensagens: 4204
Localização: São Paulo
Offline

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?

http://blog.caelum.com.br twitter: @paulo_caelum


[Email] [WWW]
Rafael Steil
Administrador
[Avatar]

Membro desde: 31/08/2002 02:35:53
Mensagens: 5984
Localização: São Paulo
Offline

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

"working code attracts people who want to code. Design documents attract people who want to talk about coding - Charles Miller"

http://rafaelsteil.com
http://twitter.com/rafaelsteil
http://www.jforum.net
http://www.flickr.com/photos/rafaelsteil
[Email] [WWW]
Paulo Silveira
Administrador
[Avatar]

Membro desde: 07/08/2002 18:38:50
Mensagens: 4204
Localização: São Paulo
Offline

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!

http://blog.caelum.com.br twitter: @paulo_caelum


[Email] [WWW]
aconstantino
Virtual Machine Man
[Avatar]

Membro desde: 14/09/2002 16:37:24
Mensagens: 698
Offline

utilizar static em varíaveis
somente em variáveis globais
[Email] [WWW] [MSN]
Paulo Silveira
Administrador
[Avatar]

Membro desde: 07/08/2002 18:38:50
Mensagens: 4204
Localização: São Paulo
Offline

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


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

Sem contar os metodos estaticos.

http://blog.caelum.com.br twitter: @paulo_caelum


[Email] [WWW]
aconstantino
Virtual Machine Man
[Avatar]

Membro desde: 14/09/2002 16:37:24
Mensagens: 698
Offline

Acho que é inútil declarar uma variável static como private ja que static normalmente é chamado Classe.ALGUMACOISASTATIC ou até mesmo um método.
[Email] [WWW] [MSN]
Rafael Steil
Administrador
[Avatar]

Membro desde: 31/08/2002 02:35:53
Mensagens: 5984
Localização: São Paulo
Offline

blackhat wrote:Acho que é inútil declarar uma variável static como private...


Inutil nao eh. Considere isso:



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

Rafael

"working code attracts people who want to code. Design documents attract people who want to talk about coding - Charles Miller"

http://rafaelsteil.com
http://twitter.com/rafaelsteil
http://www.jforum.net
http://www.flickr.com/photos/rafaelsteil
[Email] [WWW]
Paulo Silveira
Administrador
[Avatar]

Membro desde: 07/08/2002 18:38:50
Mensagens: 4204
Localização: São Paulo
Offline

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

http://blog.caelum.com.br twitter: @paulo_caelum


[Email] [WWW]
 
Índice dos Fóruns » Java Avançado
Ir para:   
Powered by JForum 2.1.8 © JForum Team