Objetos estáticos

Olá pessoal,

Gostaria de saber (dos mais experinêntes), se há alguma desvantagem em se ter muitos objetos estáticos na minha aplicação.

Eu perco performance adiquirindo este costume (sempre criar objetos estáticos)?

Só crie objetos estáticos se necessários!

Cara… não existe objetos static… conseguirias ter referências static, mas nunca objetos…

Dica, sempre evite static em seus Programas, a não ser que não tenha jeito mesmo… Um grande uso de statics é quando for criar seus utils da vida, que são funcionalidades que sempre executarão da mesma forma só para retornar valores ou realizar alguma conversão, etc. No mais, sempre crie atributos não static…

Abs []

fiz esta pergunta pq estou trabalhando em um projeto que tem mais ou menos umas
500 classes (aplicação desktop Swing), e praticamente todas elas contém referencias estáticas, o sistema
é meio lento pra iniciar, então eu pensei que este poderia ser o motivo da lentidão.

Obrigado pessoal.

o que são essas referências staticas cara ???

Não me diz que são os Objetos de domínio e Negócios do Sistema… ???

Atributos static são criados conforme os arquivos onde s encontram são carregados (load). Dessa forma, não necessariamente são todos criados no start da aplicação.

Tudo bem… mas fica aquela cassetada de referencia criada sem necessidade… e se em momento nenhum ele anular essas referências, ficam objetos vagos que nunca serão coletados…

Cara, esse Sistema tem um sério problema de Projeto e a manutenção será custosa. Isso se todas as suas referências que contém os Objetos de negócios forem static… Qualquer coisa. Posta aí… Vou almoçar…

Abs []

Entendi Eder Peixoto.

Então quer dizer que meus atributos statics não são carregados quando minha aplicação inicia…desde que a classe que contém os atributos estáticos não sejam carregados.

Agora eu só não entendi o seu “não necessariamente”. :?: :?: :?: :?: :?: :?: :?: :?: :?: :?:

Há alguma probabilidade de meus atributos estáticos serem carregados, mesmo sem que a classe que as contém não sejam carregadas?

[quote=adriano_si]Cara… não existe objetos static… conseguirias ter referências static, mas nunca objetos…

Dica, sempre evite static em seus Programas, a não ser que não tenha jeito mesmo… Um grande uso de statics é quando for criar seus utils da vida, que são funcionalidades que sempre executarão da mesma forma só para retornar valores ou realizar alguma conversão, etc. No mais, sempre crie atributos não static…

Abs [][/quote]
Exactamente, nao existe objectos estaticos, e sim referencias estaticas

Entendendo Static

Valeu.

Para comprovar o que foi dito, execute o código abaixo:

/**
 * Verifica se uma determinada classe foi carregada.
 */
public class TestLoaded{
    static{
        System.out.println( "Loading " + TestLoaded.class.getCanonicalName() );
    }

    public static void main(String[] args) throws Exception {
        java.lang.reflect.Method m = ClassLoader.class.getDeclaredMethod( "findLoadedClass", new Class[] { String.class } );
        m.setAccessible( true );
        ClassLoader cl = ClassLoader.getSystemClassLoader();

        Object test3 = m.invoke( cl, "java.lang.Math" );
        System.out.println( "Classe java.lang.Math já foi carregada? " + test3 != null );

        Math.abs( 0 );
        Object test4 = m.invoke( cl, "java.lang.Math" );
        System.out.println( "Classe java.lang.Math já foi carregada? " + test4 != null );
    }
}

Evite ao máximo usar variáveis static:

  1. Eles geram a maior parte dos memory leaks. Como seu contexto é global, eles nunca saem de escopo e seguram quem quer que apontem vivo com ele.
  2. Eles são difíceis de sincronizar. Geralmente, seu lock terá que ser estático também, o que contribui para um baixo paralelismo do sistema;
  3. Eles tornam o programa mais difícil de controlar, pois agem como variáveis globais.

De static, deixe apenas as constantes.