Qual a diferenca entre declarar uma classe e instanciar um dos seus objetos?

Ola amigos

Digamos que eu tenha a classe Humano.
e na classe Main eu tenha o seguinte código:

  1. Humano h;
  2. homem = new Humano() ;

Qual a diferença entre 1) e 2) ???

Muito Obrigado.!

Bem, no primeiro caso, você apenas declarou um objeto:

Humano homem;

Por enquanto esse objeto não tem nenhum referência, ele é null.

No segundo caso, você cria uma instância da classe Humano:

homem = new Humano();

Agora o seu objeto homem tem uma referência à classe Humano. Faça o teste:

if(homem instanceof Humano) System.out.println("Homem é um Humano!!");

Espero que te ajude…

T+

Na (1) vc tem uma ‘variavel’ do tipo Humano, na (2) vc tem uma instância da classe.

Sendo curto e grosso, quando vc precisa instânciar uma classe, vc usa new, isto te proporciona um objeto no qual é possivel acessar os métodos dessa classe. Se vc apenas declara uma variavel e não cria a instância, vc não tem acesso a esses métodos.

Porém, pra que criar uma variavel sem instânciar diretamente?

  1. Vc declara antes para usar depois; exemplo:

[code]MinhaClasse mc = null;
try{
mc = MetodoBizarro(parametros); /* este metodo pode disparar uma exception, porém nada impede que mc possa ser null */
} catch(Exception e){
e.printStackTrace();
}

OutroMetodo(mc);[/code]

  1. Pattern Singleton - quando vc lida com algo que só pode ter uma instância - conexão com banco de dados por exemplo - pode declarar diversas variaveis de um certo tipo e usa-las para armazenar a instância atual do objeto. o famoso getInstance()

  2. Definição de atributos: vc pode instanciar no construtor ou em outro objeto.

  3. Algo que sua imaginação mandar.

[quote=marcosfzara]Ola amigos

Digamos que eu tenha a classe Humano.
e na classe Main eu tenha o seguinte código:

  1. Humano h;
  2. homem = new Humano() ;

Qual a diferença entre 1) e 2) ???

Muito Obrigado.!
[/quote]

a linha 1 apenas cria uma ‘variavel’ que pode conter a referencia para um objeto do tipo Humano;
na linha 2, vc cria um Humano (ou seja, aloca espaço para ele na memoria) e faz com que a variavel homem referencia aquele objeto

Terminologicamente, tem alguns pontos que eu não concordo muito com o pessoal que postou aqui até agora, principalmente quando usam o termo “referência”.
Escrevi algo a respeito da pergunta do OP no seguinte post
http://www.guj.com.br/posts/list/34091.java#182009

Por favor, avisem se escrevi alguma bobagem, ok!