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/