Classe que não precisa ser instanciada

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?

São os famosos e odiados métodos estáticos. Não precisa instanciar a classe para usar eles.

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

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("12345678901");
}

Espero ter ajudado.

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:

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.

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(){
}
}

[quote=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();[/quote]

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?

[quote=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: [/quote]
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…

Pode ser uma classe como a Math, também:

[code]
public final class Math {
private Math() {}

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

}[/code]

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.