| Autor |
Mensagem |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 10/04/2007 14:36:10
|
wellington7
JavaEvangelist
![[Avatar]](/images/avatar/b80d1ec3ddec44d03ab7b4d32a6ae480.jpg)
Membro desde: 16/03/2007 14:03:02
Mensagens: 333
Offline
|
É vantagem eu sair colocando static e final em todos o métodos e atributos que aceitarem esses modificadores?
Eu tenho ganho de desempenho considerável utilizando muito algum desses dois?
|
"Faça por onde que eu te ajudarei"
Idéias que você deveria conhecer:
Lombok
SSCCE |
|
|
 |
|
|
![[Post New]](/templates/default/images/icon_minipost_new.gif) 10/04/2007 14:41:20
|
peerless
GUJ Master
![[Avatar]](/images/avatar/5b2a8f2b014bb326fd82ee313704e78c.jpg)
Membro desde: 22/01/2007 14:52:26
Mensagens: 1391
Localização: Porto Alegre / RS
Offline
|
não é vantagem, uma vez que você precise trabalhar com mais de uma instancia para cada objeto...
|
follow me
pitacos
"The most problems that teams face are about communication, and all the others are too." - Dan North
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 10/04/2007 14:42:20
|
ViniGodoy
Moderador
![[Avatar]](/images/avatar/1921493b5362e63fbe8983f4bd54157d.png)
Membro desde: 11/12/2006 08:22:01
Mensagens: 20580
Localização: Curitiba/PR
Offline
|
O static e final em conjunto deve ser usado apenas para constantes.
Dê sempre preferência ao projeto de suas classes e a um código claro, ao invés da performance. Classes bem projetadas podem ser facilmente otimizadas, enquanto as mal projetadas, não.
Quando for otimizar seu código, use um profiler para identificar os pontos com problema e otimize somente esses lugares. Deixe o código otimizado documentado, explicando o motivo da otimização e os ganhos com seu novo algoritmo, assim você não corre o risco de alguém desfazer o código da otimização por engano.
O compilador faz um trabalho muito bom com otimizações. Como já foi demonstrado com o C++, não é necessário dar dicas a ele com a palavra final e ele geralmente fará um trabalho muito melhor do que você nesse sentido. Do contrário do C++, o java é capaz de analisar o código em tempo de execução e fazer inline de métodos on the fly.
Para mais informações, dê uma lida nos artigos, do Brian Goetz:
Java theory and practice: Is that your final answer?
Java theory and practice: Urban performance legends
Você terá ganho significativo de performance escolhendo algoritmos eficientes e usando bem a API do java (que já tem algoritmos assim prontos). Por exemplo, se você ainda ordena uma lista com Bubble sort, ao invés de simplesmente chamar Collections.sort (que usa um QuickSort modificado), certamente terá aplicações de performance baixa.
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 10/04/2007 14:59:44
|
Dieval Guizelini
Virtual Machine Man
![[Avatar]](/images/avatar/9fc92b9c69b711dcb880ccb743fc6f06.jpg)
Membro desde: 05/07/2006 14:39:44
Mensagens: 570
Localização: Curitiba - PR
Offline
|
Vale a pena dar uma olhada neste endereços:
static
http://www.javapractices.com/Topic2.cjp
http://www.javapractices.com/Topic195.cjp
final
http://www.javapractices.com/Topic23.cjp
fw
|
Sun Certified Java Programmer 5.0 |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 10/04/2007 15:00:46
|
thingol
Moderador
Membro desde: 29/07/2004 16:10:13
Mensagens: 17543
Offline
|
Uma coisa que é interessante é usar "final" para parâmetros e variáveis locais inicializadas.
Isso normalmente evita alguns erros bobos de programação que ocorrem porque a gente sempre esquece que parâmetros são passados por valor, não por referência.
Exemplo: por que este código não funciona como desejado?
Se você passar os parâmetros para "final", vai ver por que é que não funciona:
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 10/04/2007 15:27:56
|
LPJava
GUJ Hacker
Membro desde: 18/04/2006 12:50:23
Mensagens: 5524
Localização: Bahia/Porto Alegre
Offline
|
wellington7 wrote:É vantagem eu sair colocando static e final em todos o métodos e atributos que aceitarem esses modificadores?
Eu tenho ganho de desempenho considerável utilizando muito algum desses dois?
cara existe uma grande diferença entre o static e o final, o static diz que q seu metodo pertence a class e q so pode ser chamado por outro metodo static.. agora o final diz o seguinte.. que seu metodo jamais vai subscrito em sua subclasse... um metodo final ele nao eh herdado uma class final ele nao eh herdado o metodo static tb nao eh herdado mais pode ser redefinido.. em uma subclass...
|
Sun Certified Java Programmer 5.0
Blog:http://www.camilolopes.com
Twitter:www.twitter.com/camilolope
Linkedin: http://br.linkedin.com/in/camilolopes
Curso online OCPJP: http://pro.imasters.com.br/online/cursos/preparatorio-para-certificacao-java-ocjp
Autor livro Guia SCJP & JEE c/ Frameworks: http://blog.camilolopes.com.br/livrosrevistaspalestras/
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 10/04/2007 17:21:02
|
wellington7
JavaEvangelist
![[Avatar]](/images/avatar/b80d1ec3ddec44d03ab7b4d32a6ae480.jpg)
Membro desde: 16/03/2007 14:03:02
Mensagens: 333
Offline
|
Vamos ver se entendi..
"final" não é bom para métodos, pois impede que o Java possa fazer sua própria otimização (que seria muito melhor do q a minha).
Mas "final" é muito bom para os atributos e variaveis locais, para impedir que se modifique o valor (quando não se desejar modificar esse valor..)
E o "static" (como estou usando) é muito legal pra atributos ou métodos que se quer acessar sem criar uma instancia da classe. Eu por exemplo estou criando desenhos em celulas da jTable, a classe Desenho tem todos os desenhos como static, eu acesso Desenho.fig1() e ele já desenha, de qualquer parte do programa.
Em outras palavras:
Static = Acesso global, sem necessidade de instancia.
Final = Contante. Na maioria, bom apenas para atributos locais.
Qualquer coisa me corrijam.
Valeu!
|
"Faça por onde que eu te ajudarei"
Idéias que você deveria conhecer:
Lombok
SSCCE |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 10/04/2007 17:31:41
|
pcalcado
Moderador
![[Avatar]](/images/avatar/110eec23201d80e40d0c4a48954e2ff5.jpg)
Membro desde: 08/03/2004 17:19:35
Mensagens: 5174
Localização: Sydney - Australia
Offline
|
Como um adendo, se você quer seguir boas práticas de OOP deve marcar como final todos os métodos que não vai dar suporte. Ou seja: se sua classe não está preparada para trabalhar com uma versão polimórfica de um dado método faça-o final.
|
Phillip Calçado "Shoes"
http://fragmental.tw/
http://blog.fragmental.com.br/
"It is unfortunate that much of what is called 'object-oriented programming today is simply old style programming with fancier constructs." - Alan Kay |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 10/04/2007 18:31:08
|
Rafael Nunes
Moderador
![[Avatar]](/images/avatar/d072677d210ac4c03ba046120f0802ec.png)
Membro desde: 09/10/2003 13:41:06
Mensagens: 2890
Localização: sao bernardo do campo
Offline
|
thingol wrote:
Exemplo: por que este código não funciona como desejado?
Creio que não entendi bem o exemplo, o que exatamente ele deveria realizar que não está realizando?
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 10/04/2007 19:54:26
|
seufagner
JavaEvangelist
![[Avatar]](/images/avatar/5fd0245f6c9ddbdf3eff0f505975b6a7.jpg)
Membro desde: 06/05/2005 16:33:09
Mensagens: 447
Localização: Rio de Janeiro - RJ
Offline
|
Também estou bastante curioso. rsrs
|
@seufagner
seufagner.com.br
"Simplicidade é a maior forma de sofisticação"
Leonardo Da vinci
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 10/04/2007 20:11:49
|
romulolara
Smalltalk
Membro desde: 13/11/2006 18:29:54
Mensagens: 4
Offline
|
Abusar de Static nunca é uma boa prática em OO... Tem que se usada nos casos específicos, pois se todos os métodos e classes tivessem static seria como programar em procedural!!
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 10/04/2007 20:56:29
|
urubatan
Moderador
![[Avatar]](/images/avatar/fe9fc289c3ff0af142b6d3bead98a923.jpg)
Membro desde: 21/09/2002 10:31:26
Mensagens: 2481
Localização: Porto Alegre/RS
Offline
|
tenha pro regra o seguinte, o único método estático da aplicação é o public static void main
para ter qualquer outro método static tu precisa de um ótimo motivo
|
[]'s
Rodrigo Urubatan
http://www.urubatan.com.br
Melhor livro de RoR do brasil: http://livro.urubatan.com.br
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 10/04/2007 23:48:33
|
ViniGodoy
Moderador
![[Avatar]](/images/avatar/1921493b5362e63fbe8983f4bd54157d.png)
Membro desde: 11/12/2006 08:22:01
Mensagens: 20580
Localização: Curitiba/PR
Offline
|
Rafael Nunes wrote:
Creio que não entendi bem o exemplo, o que exatamente ele deveria realizar que não está realizando?
O código do Thingol deveria trocar o valor dois dois Strings, mas ele não faz isso. Isso porque a função receberá 2 referências para as strings, mas elas são simplesmente cópias das referências originais.
Assim, alterar o valor dentro da função não refletirá em nada fora da função.
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 10/04/2007 23:51:33
|
ViniGodoy
Moderador
![[Avatar]](/images/avatar/1921493b5362e63fbe8983f4bd54157d.png)
Membro desde: 11/12/2006 08:22:01
Mensagens: 20580
Localização: Curitiba/PR
Offline
|
Em resumo da ópera:
Use static e final apenas quando isso se refletir ou reforçar uma decisão de projeto, nunca por motivos como performance.
Os modificadores static e final foram criados com um motivo específico e é esse motivo que deve ser levado em conta no momento de utiliza-los.
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 11/04/2007 00:44:16
|
cv
Moderador
![[Avatar]](/images/avatar/210f760a89db30aa72ca258a3483cc7f.jpg)
Membro desde: 04/04/2003 00:32:12
Mensagens: 7842
Localização: São Paulo, SP
Offline
|
pcalcado wrote:Como um adendo, se você quer seguir boas práticas de OOP deve marcar como final todos os métodos que não vai dar suporte. Ou seja: se sua classe não está preparada para trabalhar com uma versão polimórfica de um dado método faça-o final.
Pra que?
|
|
|
 |
|
|