referencia: public class Pessoa{String nome; int idade; float peso; float altura;public static void main(String[] args){Pessoa p1 = new Pessoa();Pessoa p2 = p1;Pessoa p3 = p2; }} Quando o arquivo Pessoa.java for executado, o esquema grafico do nosso codigo ficara da seguinte maneira:Lembre-se, variaveis de referencia armazenam simplesmente "referencias a objetos", ou seja, se uma variavel de referencia referencia outra, entao ambas referenciarao o mesmo objeto ou null.Referencia null Quando nao queremos que uma variavel de referencia referencie um objeto, podemos fazer com que ela referencie null.null e uma palavra-chave para fazer com que uma variavel de referencia nao referencie nenhum objeto. Observe o exemplo: Pessoa pes = new Pessoa(); pes = null; Resultado:Variaveis de referencia locaisTodos os exemplos de variaveis de referencias citados anteriormente sao declarados e imediatamente inicializados. Toda variavel declarada precisa referenciar algo caso seja utilizada. No caso das variaveis de referencias, deve referenciar ou o valor null ou um objeto. Por exemplo:public void metodoQualquer(){ Pessoa p; }Sera compilado sem erros. Contudo, por enquanto, a variavel "p" esta inutilizada. Observe o exemplo a seguir:public void metodoQualquer(){ Pessoa p; p.nome = "Pollyana"; }A variavel "p" esta sendo utilizada. Por estar sendo utilizada sem referenciar algum valor, o compilador acusara o seguinte erro:The local variable p may not have been initializedO proximo exemplo nao possui erros de compilacao:public void metodoQualquer(){ Pessoa p = null; p.nome = "Pollyana"; }As variaveis de referencia que sao atributos de uma classe sao inicializadas automaticamente com null, caso voce as programar para receberem um objeto. Aprenderemos sobre inicializacao de atributos em Posts posteriores.NullPointerExceptionSe voce ainda se deparou com esta excecao, sua hora chegara. Uma excecao NullPointerException ocorrera quando voce tentar acessar um objeto que nao existe - frequentemente fazemos isso porque pensamos que tal objeto existe. Em IDEs como Eclipse, por exemplo, ao pressionar Ctrl+Espaco apos o operador ponto"." de uma variavel, automaticamente se abrira uma caixa de selecao com atributos e metodos pertencentes ao tipo da classe em questao, como na imagem abaixo:Isto muita vezes nos induz a acessar metodos, por exemplo, de objetos que nao existem. Por exemplo: Pessoa p;p.nome = "Andre"; Seria como se na linha 1, voce dissesse ao compilador: "Compilador, estou declarando uma variavel do tipo Pessoa, e ela se chamara p", e na linha 2 voce dissesse: "Compilador, quero que o atributo "nome" do objeto que minha variavel p referencia tenha seu valor alterado para "Andre" ".Logo, se este trecho de codigo for executado, uma excecao NullPointerException sera lancada: java.lang.NullPointerExceptionO seguinte trecho tambem gera excecao de NullPointerException:Scanner entrada = new Scanner(System.in); Scanner entrada2 = entrada; entrada = null;entrada.nextInt(); A variavel "entrada" referenciava um objeto, logo em seguida a variavel "entrada2" passou a referenciar o objeto de "entrada". Na linha 3, "entrada" passou a ter referencia para null, e finalmente na linha 4 tentou-se acessar o metodo nextInt() atraves da variavel de referencia "entrada", que nao mais referencia qualquer objeto. Analisemos o nome da excecao: NullPointerException. Sua traducao significa algo como: "Excecao de ponteiro nulo". Isto significa dizer que tentou-se acessar algo de uma referencia de objeto que nao existe.Bem, ficamos por