as vezes no decorrer da programação, encontramos situações em que não é possivel instanciar um novo objeto ja que o mesmo ja existe em uma outra classe um tanto fora de mão para ser acessada . Então para sanar este tipo de problema utilizamos a palavra chave static. que de uma forma um tanto estranha acessa um metodo ou variavel de determinada classe sem ser necessario uma outra instancia.
agora pergunto…
Essa forma de resolver problema é um a boa forma de programação ou um tapa buraco?
A palavra reservada static torna a variavel mais pesada?
se for verificado a constante utilização de variaveis e metodos estaticos em um projeto para a solução de problemas eventuais. Então deverá ser feito um refactoring para resolver de forma flexivel estes problemas?
gostaria que falasse sobre a real utilidade do static dentro do contexto que eu criei…
Na minha opinião, ela tem utilidade, como por exemplo no pattern “Factory” e etc.
Sobre performance: Acredito que deve não deve ter diferença, pois por se parecer com uma “variável global” até retira alguma checagem de escopo (ou isso é feito já na compilação?).
Bom, variáveis e métodos static não são um “tapa buraco”. Recomendo que você leia algum artigo a respeito do assunto para entender melhor (se não me engano, tem um artigo aqui no GUJ mesmo).
Pra responder um pouco das suas dúvidas:
Uma variável estática é uma variável de classe e não de instância. Significa que ela existe desde o momento em que a classe que a contém é carregada pelo classloader. Não é preciso haver uma instância da classe “XXX” para se ter acesso a ela. Basta fazer “XXX.variavel_estatica”.
E por ser uma variável de classe, significa que ela é única em um classloader.
Por este motivo, as constantes de uma aplicação são declaradas com “public static”. Você economiza recursos de memória, por exemplo, porque só 1 variável é guardada na memória. E isso é permitido porque toda a sua aplicação precisa do mesmo valor (é uma constante). Caso você altere o valor dela em um ponto da aplicação, o valor lido em qualquer outra parte da app será o alterado (lembra que ela é uma só pra todo mundo?). Então, indo além, você deve declarar as suas constantes como “public final static”. Dessa forma, não existe uma constante para cada instância da classe XXX. Imagine que você tenha uma variável de instância (não static) na classe XXX. Se tiver 1000 instâncias dessa classe XXX, terá 1000 valores, que podem ser os mesmos ou não (depende se foi alterado). Para uma constante, você precisa de um só…
E por este mesmo motivo, variáveis e métodos que precisam guardar estado não podem ser estáticos.
Bom, isso é somente uma aplicação do static. Por isso disse que deveria ler alguma coisa sobre o assunto, pra entender melhor
pessoal, obrigado pelos esclarecimentos, mas, eu sei perfeitamente o que é e significa static.
Quero saber se ela é uma solução otima para os problemas corriqueiros durante a construção de uma aplicação ou se ela é uma utilidade mais simples que nao deveria ser utilizada para fins mais complexos… ou como considero em certas ocasioes “um tapa buraco”
A palavra static não é um tapaburaco. É um recurso imprescindivel. Sem ele vc não começa os programas (static main()) .
O que é tapaburaco e má programação é o que vc descreveu. Tornar a variável static apenas para poder acessá-la de outro lugar do codigo é errado. Isso é coisa que se faz em VB e Delphi , mas que está errado em Java e em OO em geral. A forma correcta é vc passar os objectos necessários para os objetos que precisam deles. É para isso que servem os setXXX e os contrutores com argumentos
vixe… acho q falta um pouco mesmo de conceito básicos.
Posso te dar uma dica???
Eu estudei muitas coisas pela net e achava q sabia de Java… Mas quando comecei a ler o livro “Use a cabeça! Java” eu aprendi muitas coisas simples como esta.
Recomendo
Também acho que estudar a linguagem é vital. Mas mesmo estudando continuamos tendo dúvidas (até mais do que antes) e não há mal algum perguntar.
[quote=GiancarloBraga]Gente, deixa eu fazer duas perguntas só(pergunta novata, querendo aqui entender direito as estruturas do Java).
Porque todas as variáveis não são estáticas?
Não seria mais fácil por não precisar instanciar a classe da qual pertencem para usá-las?[/quote]
Se todas as variáveis fossem estáticas, você não conseguiria guardar estado. Imagine que você tenha uma classe “Carro” com os atributos estáticos. Agora consulte uma base de dados e obtenha uma lista de carros. Como os atributos da classe “Carro” são estáticos, todos os objetos dessa classe compartilham as mesmas características. Você teria, portanto, uma lista de carros mas todos com o mesmo nome, mesma cor, mesmo motor, etc…
Será que consegui me fazer entender?? Qualquer coisa pergunte de novo…
PS - Recomendo que estude usando o livro da Kathy Sierra para certificação SCJP. Todos esses conceitos você aprende lá e ainda, de quebra, vai se preparando pra certificação.
Eu estudei ainda esses dias via apostila da Caelum o assunto mas esqueci isso, acredita? Eu tenho estudado muito com várias fontes e acabei esquecendo esse conceito de static…Agora você me fez lembrar que um argumento estático é compartilhado em comum entre TODOS os objetos criados daquela classe, diferente dos métodos não-estáticos. Essa é a importância dele e concordando com o pessoal que disse que static não é tapa buraco, digo o mesmo. FUNDAMENTAL o static.
Na verdade eu ia responder o tópico porque sabia exatamente o que era static e a importância, mas na hora me deu um branco total, rsrsrs, aí eu postei e agora lembrei novamente.
Muito obrigado, Adolfo.
Valeu aí fabiocsi também, você tem razão! Eu tenho estudado pela apostila da Caelum mesmo só que tinha esquecido esse detalhe do argumento static ser compartilhado por todos os objetos, rsrsrs, pequeno lapso de memória.
Eu acreditava que o static era usado tbm com esse proposito de tapar buraco mesmo em grandes empresas de tecnologia, visto que as vezes nos encontramos em becos sem saida e so a utilização do static poderia salvar imediatamente a continuidade do desenvolvimento.
falta de analise e projeto do software acabam levando a isso! vou estudar mais…