Solucionado (ver solução)
Solucionado
(ver solução)
5
respostas

referencia

ola, achei meio confusa esta questao de passar por referencia...

5 respostas

Não se preocupe, com o tempo fica mais fácil, tenta fazer desenhos pra entender referências. Em programação existem diversos conceitos difíceis de entender inicialmente, mas tenta ver imagens, ou textos explicativos daquilo para aprender mais rápido.

Falando de forma simples, (ou tentando) todas as variaveis de objetos guardam apenas um endereço de onde está o endereço, olha a imagem abaixo.

https://i.stack.imgur.com/Ba3hJ.jpg

Apesar de ser errado dizer dessa forma, acho que fica mais fácil pra você entender. O fato de você ter uma referência de classe dentro de outra faz com que você tenha acesso aos atributos e métodos da outra classe. Vou criar duas classes pra exemplificar :

Classe Cliente

public class Cliente {
    String nome;
    String telefone;
    // Aqui temos uma referência para a classe Endereco com o nome endereco.
    Endereco endereco;
}

Classe Endereco

public class Endereco {
    String rua;
    int numero;
    String complemento;
}

Quando temos uma referência dentro de outro objeto, podemos "navegar" entre os objetos, fazendo da seguinte forma :

public static void main(String[] args){
    Cliente cliente = new Cliente();
    cliente.endereco.rua = "Rua A";
}

Mas conforme o Paulo falou, se você tentar setar um valor pra um atributo de uma referência que não foi instanciada, vai acontecer aquele erro do nullPointer. Então para poder navegar entre os objetos, você precisa instanciar o objeto dentro da referência.

Endereco endereco  = new Endereco();
endereco.rua = "Rua A";

cliente.endereco = endereco;
solução!

obrigado pessoal...acho que ficou claro

testei e deu errado, fiz assim:

public class Cliente {

        String nome;
        String cpf;
        int idade;
        Endereco endereco;

    }

public class Endereco {

    String rua;
    int numero;
    String bairro;
    String cidade;
    String estado;

}

public class TestaCliente {

    public static void main(String[] args) {

        Cliente cliente1 = new Cliente();
        cliente1.nome = "Jose da Silva";
        cliente1.cpf = "142.452.129.36";
        cliente1.idade = 36;
        cliente1.endereco.rua = "Barao do amazonas";
        //cliente1.endereco.numero = 1465;
        //cliente1.endereco.bairro = "Sumare";
        //cliente1.endereco.cidade = "Ribeirao Preto";
        //cliente1.endereco.estado = "SP";

        System.out.println("Cliente: " +cliente1.nome);
        System.out.println("CPF: " +cliente1.cpf);
        System.out.println("Idade " +cliente1.idade);

    }    

}

mas na hora que roda, em todas as linhas onde tem referencia da um erro:

Exception in thread "main" java.lang.NullPointerException at TestaCliente.main(TestaCliente.java:10)

Você precisa instanciar um objeto do tipo Endereco. Como você não tem o objeto do tipo Endereco, ele vai exibir a mensagem de NullPointer.

Você pode navegar nos objetos mas tem que instancia-los da mesma forma. Está tentando acessar uma propriedade de um objeto que não foi criado. Ele pertence a Cliente mas ele não existe ainda.

Pra você conseguir acessar, você precisa fazer isso :

public class TestaCliente {

    public static void main(String[] args) {

        Cliente cliente1 = new Cliente();
        cliente1.nome = "Jose da Silva";
        cliente1.cpf = "142.452.129.36";
        cliente1.idade = 36;

    // Instanciando objeto do tipo Endereco;
    Endereco endereco = new Endereco();
        cliente1.endereco.rua = "Barao do amazonas";
        //cliente1.endereco.numero = 1465;
        //cliente1.endereco.bairro = "Sumare";
        //cliente1.endereco.cidade = "Ribeirao Preto";
        //cliente1.endereco.estado = "SP";

        System.out.println("Cliente: " +cliente1.nome);
        System.out.println("CPF: " +cliente1.cpf);
        System.out.println("Idade " +cliente1.idade);

    }    

}

Sacou ?

Quer mergulhar em tecnologia e aprendizagem?

Receba a newsletter que o nosso CEO escreve pessoalmente, com insights do mercado de trabalho, ciência e desenvolvimento de software