Eu tenho isso no meu código
Thread.currentThread().sleep(x);
Eclipse me diz para usar o estático
Thread.sleep(x);
em vez disso, por quê? Qual é a diferença, existe alguma diferença de funcionalidade entre esses 2 métodos?
Eu tenho isso no meu código
Thread.currentThread().sleep(x);
Eclipse me diz para usar o estático
Thread.sleep(x);
em vez disso, por quê? Qual é a diferença, existe alguma diferença de funcionalidade entre esses 2 métodos?
Respostas:
Existe apenas um método, não dois, e é estático. Embora você possa chamar um método estático por meio de uma referência de instância, não é um bom estilo. Indica que o programador pensa que está chamando um método de instância. Um programador confuso pode estar pensando que pode fazer com que outro thread (não o atual) adormeça desta forma, quando não é o que acontece.
Ambas as suas linhas de código fazem a mesma coisa, mas a segunda é um estilo melhor.
Em Java, o sono é um método estático. Ambos os seus exemplos fazem exatamente a mesma coisa, mas a versão anterior é confusa porque parece que está chamando um método em um objeto específico, mas não está fazendo nada disso. No seu exemplo, não importa muito, mas é mais perigoso se você tiver o seguinte:
someOtherThread.sleep(x);
Desta vez, parece que você está dizendo a algum outro thread para suspender, mas na verdade você está colocando o thread atual no modo de espera. A maneira de evitar esse tipo de erro é sempre chamar métodos estáticos usando a classe em vez de um objeto específico.
As duas chamadas de método são idênticas em comportamento porque invocam o mesmo método, mas o uso do nome da classe ( Thread , neste caso) em vez de instância para acessar campos e métodos estáticos torna essa condição estática clara. É por isso que este aviso é produzido.
Mas, considerando que os campos e métodos estáticos são mostrados de uma maneira particular na maioria dos IDEs (por exemplo, em fonte itálica no Eclipse e no IntelliJ IDEA), este aviso ainda é necessário? Talvez não seja tão necessário quanto no início do Java que editores simples estavam em uso.
Thread.currentThread().sleep(x);
ou a maneira como o Eclipse diz que o Thread.sleep(x);
contexto estático é necessário se for necessário, então esperamos por um pequeno atraso com esse sono.
O paradigma estático definido por um objeto afeta apenas o ciclo de vida de impressão do heap de objeto específico, novamente considerando que o ciclo de vida do objeto geral estático não é tão incômodo, se necessário, pode ser usado para facilitar a codificação, mas deve ser feito com cuidado como print é referido por Class
(por exemplo: - Class.forName(pkg.className)
) como por nome e não por qualquer um object
que seja uma cópia de impressão única em tempo de execução da Classe na HEAP
memória.
Novamente, o uso de objeto também tem prós e contras pelos tipos de referências Fraca, Fantasma e Forte ....,
O código é complicado por natureza. É apenas a maneira como fazemos para que funcione e funcione.