ontem fui instanciar uma classe chamada StringUtils (acho que é isso) quando fui instancia (new StringUtils() ) foi apresentado uma mensagem dizendo que a classe não poderia ser instanciada, após importar no projeto, já poderia usar os métodos tipo:
StringUtils.método1(); StringUtils.método2();
O que seriam essas classes que não precisam ser instanciadas?
Alguém poderia postar um exemplo de uma classe assim?
São os famosos e odiados métodos estáticos. Não precisa instanciar a classe para usar eles.
evandro.santos
São as classes que não possuem construtor público ou classes que apenas possuem métodos estáticos.
Já vi alguns textos que dizem que o ideal é não criar classes com construtores público e sim criar métodos estáticos do tipo NomeDeSuaClasse.getInstance();
H
henriquejhc
Exemplo:
Você tem uma classe chamada Validator, que tem métodos estáticos que fazem a validação de cpf, cnpj, email, etc.
publicclassValidator{publicstaticbooleanvalidarCpf(Stringcpf){// implementar a validacaoif(cpf==valido){returntrue;}else{returnfalse;}}}
Quando você for usar um desses métodos, você não precisa criar uma instância dessa classe.
Você utiliza assim:
Evandro fiquei curioso, você teria algum exemplo da classe com o método do tipo NomeDeSuaClasse.getInstance();
robson_oliveira
A classe String é Final.
“public final class String”
Todas classes que sao “Final”, não podem ser extendidas, este e o objetivo de “Final”
Por isso você recebeu a mensagem do compilador, que a classe nao poderia ser extendida.
Agora uma classe que possui membros estaticos, a classe pode ser extendida, instanciada normalmente, porem nao e necessario criar um objeto da classe para acessar um membro estatico, pois o membro estatico e da classe.
Ate mais.
Marky.Vasconcelos
Esse getInstance é para o padrão Singleton, é bem simples. Construtor privado e uma instancia estatica na classe que é retornada por getInstance.
São as classes que não possuem construtor público ou classes que apenas possuem métodos estáticos.
Já vi alguns textos que dizem que o ideal é não criar classes com construtores público e sim criar métodos estáticos do tipo NomeDeSuaClasse.getInstance();
Depende mano, tem classes que devem ser instânciadas,
e outras que não ou devem ter o construtor privado, depende da circustância…
tipo, se vc necessita de realizar um singleton, vc vai ter que colocar o construtor privado ou protegido, entende?
Tchello
java:
herique, evandro e fábio…
muito obrigado pelas explicações!!!
Evandro fiquei curioso, você teria algum exemplo da classe com o método do tipo NomeDeSuaClasse.getInstance();
Se você fizer algumas buscas encontrará um padrão chamado Singleton.
Tome cuidado, esse Design Pattern na maioria das vezes se torna um Anti-Pattern.
Antes de se aventurar por essas bandas de patterns sugiro que estude mais modificadores de acesso, variáveis/métodos estáticos, etc…
Observe que o final impede a classe de ser herdada. O construtor privado vazio, sendo o único, impede a classe de ser instanciada. E os métodos estáticos não exigem objetos para serem usados.