Objeto que pode ser instanciado?

Me desculpem a pergunta se parece meio idiota, mas de acordo com a seguinte sequencia de comandos :

Class businessLogicClass = Class.forName(“pacote.minhaClasse.class”);
BusinessLogic businessLogicObject;
businessLogicObject = (BusinessLogic)businessLogicClass.newInstance();

Na primeira linha a classe Class está criando um objeto para uma referência do tipo Class ?
E na terceira linha este objeto está sendo instanciado ?
Ou seja, neste caso estou gerando instancia de um objeto, ao invés de gerar instancia de uma classe ?

Ou o que é que está acontecendo na verdade ?

Objeto é sinonimo de instância.

Isso chamasse reflection, nesse caso é criado um objeto da classe java.lang.Class, que é uma classe que representa uma classe 8O

Assim como uma class Carro representa um carro, uma classe Funcionario representa um funcionário, a classe Class representa uma classe…

Então, ao chamar o newInstance() a partir do objeto da classe java.lang.Class é o equivalente a fazer new NomeDaClasse()

ex.:

Class classe = Class.forName("java.util.ArrayList"); Object obj = classe.newInstance();

é o mesmo que

Object obj = new ArrayList();

A primeira opção é usada caso o nome da classe não seja conhecido em tempo de compilação, ou seja, você fez sua aplicação mas não sabe que classe vai instanciar ali, o nome dela vai vir em uma String, que pode vir de um arquivo, parametro, etc…

Um exemplo é o uso de JDBC, para usar JDBC você tem que instanciar o driver, mas geralmente você não sabe o nome da classe do driver em tempo de compilação, somente em tempo de execução, fazer isso seria valido:

[code]import com.mysql.jdbc.Driver

Driver driver = new Driver();[/code]

Porem, você amarra seu código ao nome da classe do driver, se mudar pra Oracle, vai ter que mudar seu código, por isso, o que geralmente é feito é isso:

Class.forName("com.mysql.jdbc.Driver").newInstance();

Mas tome cuidado com isso, pois é um processo muito “custoso” e se usado sem necessidade pode prejudicar muito a performance da sua aplicação.

http://java.sun.com/j2se/1.3/docs/guide/reflection/