Classe que não precisa ser instanciada

9 respostas
java

Boa noite amigos,

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?

9 Respostas

fabiofalci

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

Exemplo:
Você tem uma classe chamada Validator, que tem métodos estáticos que fazem a validação de cpf, cnpj, email, etc.

public class Validator {
	
	public static boolean validarCpf(String cpf) {
		// implementar a validacao
        if(cpf == valido){
             return true;
         }else{
             return false;
         }
	}
}

Quando você for usar um desses métodos, você não precisa criar uma instância dessa classe.
Você utiliza assim:

public static void main(String[] args) {
	boolean cpfValido = Validator.validarCpf("[telefone removido]");
}

Espero ter ajudado.

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(); :wink: :wink:

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.

public class ClasseUnica {
private static ClasseUnica instance;
public ClasseUnica getInstance(){
if(instance == null)instance = new ClasseUnica();
return instance;
}
private ClasseUnica(){
}
}
xjunior

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();

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(); :wink: :wink:


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…

ViniGodoy
Pode ser uma classe como a Math, também:
public final class Math {
    private Math() {}

    public static int sum(int a, int b) {
        return a+b;
    }
    //Mais métodos estáticos aqui
}

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.

Criado 10 de fevereiro de 2010
Ultima resposta 11 de fev. de 2010
Respostas 9
Participantes 9