Class.forName()

5 respostas
E

Boa tarde pessoal,

Estava dando uma estudada e o método forName(parametro) da classe Class é para instanciar a classe passada como parametro?

se por isso os seguintes códigos seriam equivalentes?

Animal a = new Animal();

Class.forName(“Animal”);

qual seria a diferença ou vantagem de usar o Class.forName() ?

dei uma procurada no google mas os exemplos e trechos de código q encontrei o método forName() com um driver de banco como parametro. alguem saberia me dizer se esta utilização mais utilizada para esta método?

5 Respostas

Guerr

Na verdade o Class.forName() você usa para obter uma instância da variável Class relativa aquela classe. Para instancia-la você precisar utiliza o método newInstance() (para chamar o construtor sem parâmetros). Desta forma são equivalentes:

Animal a = new Animal();
Animal a = (Animal) Class.forName("Animal").newInstance();

O Class.forName() costuma ser utilizado quando você não conhece a classe que vai ser instanciada em tempo de compilação e somente em tempo de execução. Um exemplo seria um nome de classe configurado em um arquivo XML.

T

Class.forName, tecnicamente, carrega a classe e chama os métodos de inicialização estática dessa classe; não cria uma instância dessa classe. Esse método retorna um objeto do tipo java.lang.Class.

Para criar uma instãncia, você precisaria pegar o objeto do tipo java.lang.Class que foi retornado por Class.forName, e chamar o método “newInstance”.

Ela é usada de várias formas; por exemplo, você poderia ter um componente Java que implementasse uma determinada interface, cujo nome fosse dado em um arquivo de configuração.

E

pera ai que agora não entendo nada…
o que seria um método de inicialização estática? :?:
carregar a classe não seria instancia-la?:

se não fosse pedir muito vcs poderiam me explicar de forma mais simples, pode ser que pra vcs seja um exemplo muito banal, mas pra mim que estou iniciando em java vai ajudar muito. :lol:

L

NO caso o objeto deve conter um construtor nulo? , ou não é preciso porque caso receba parâmetros o método atribui automaticamente valores nulo ou 0?

V

ezellis:
pera ai que agora não entendo nada…
o que seria um método de inicialização estática? :?:
carregar a classe não seria instancia-la?:

se não fosse pedir muito vcs poderiam me explicar de forma mais simples, pode ser que pra vcs seja um exemplo muito banal, mas pra mim que estou iniciando em java vai ajudar muito. :lol:

o java permite a criação de um bloco de código estático ele geralmente é inicializado ao importar a classe ou iniciar o programa (se não me engano), ele não é diferente de outro bloco de código qualquer a sua sintaxe é assim

public class Oi {
     static {
        System.out.println("oi1");
    }

    public static void main(String... args) {
        System.out.println("oi2");
    }
}

saida

oi1
oi2

observe que o bloco estático é inicializado primeiro que o próprio main, se não me engano são esses blocos que são inicializados quando você chama o "Class.forName() "

Criado 23 de janeiro de 2007
Ultima resposta 9 de jul. de 2013
Respostas 5
Participantes 5