5
respostas

Ajuda com entendimento numa explicação sobre Array de Objetos.

"Repare que um "array de objetos" é, no fim, um "array de referências para objetos". Ou seja, precisamos instanciar o objeto dentro de cada posição desse array. Por isso fizemos new Conta()."

Não consegui entender essa explicação acima, alguém pode me ajudar?

5 respostas

Se ele não instanciar , não será possível ter acesso aos atributos do objeto Conta pois estaria nulo, causando NullReferenceExcepition ao tentar adicionar o numero da conta.

Cada posição do array é equivalente a uma variável, sendo assim é equivalente:

//-- Declarar 3 variáveis
Conta var0 = new Conta()
Conta var1 = new Conta()
Conta var2 = new Conta()
//É equivalente a declarar um array de 3 posições
Conta Variaveis[] =  new Conta[3]
//A diferença é a facilidade de acesso disponibilizado pelo array

Olá.

Quando você quer criar um objeto Conta, o que você faz?

Se você criar somente a referência, não poderá utilizar o objeto, como no caso abaixo:

Conta account;

Com esse código criamos uma referência para a classe Conta, chamada account. A partir do momento que eu quiser usar essa variável, tenho que transformá-la em um objeto, logo devo criar uma instância da classe Conta (usando a palavra new):

Conta account;
account = new Conta();

Ou façamos direto:

Conta account = new Conta();

Agora, quando falamos de array, sabemos que cada posição do array é uma referência pra conta, veja só:

Conta[] accounts = new Conta[5];

// Note que esse 5 não é passado para um constutor. Nem usamos os parênteses nesse caso e sim colchetes, logo não é o construtor da classe. Nesse caso o colchetes indica o número de posições do array e o new indica que estamos instanciando um array.

Veja bem, no código acima eu criei 5 referências para a classe Conta, mas não instanciei nenhuma. Note que usando "new Conta[5]" estou instanciando um novo array, não os objetos da classe Conta. Para isso, preciso fazer:

accounts[0] = new Conta();
accounts[1] = new Conta();
accounts[2] = new Conta();
accounts[3] = new Conta();
accounts[4] = new Conta();

Sacou? Se você criar só o array sem instanciar, como já disseram acima, você não conseguirá usar os objetos nas posições do array. Claro que, se fosse array de int ou outro timo primitivo, não precisaria instanciar nada, assim como quando você cria variável do tipo int não precisa instanciar.

Para facilitar a criação dos objetos no array, sempre prefira usar um laço, obviamente.

[]'s.

É o mesmo que dizer que quando você faz isso:

Conta[] contas = new Conta[3];

Você está pedindo ao compilador para reservar espaço suficiente na memória para guardar 3 objetos - que você ainda não sabe quais são, mas sabe que são da "espécie" Conta.

Feito isso, quando você começar a popular esse array, e já souber quem são os 3 sujeitos, você começa a apontar quem irá ficar em cada uma das posições reservadas.

contas[0] = new Conta(); //conta do fulano
contas[1] = new Conta(); //conta do beltrano
contas[2] = new Conta(); //conta do ciclano

Como objetos são tipo Referência e não de Valor (como int) eles são iniciados naturalmente como:

null

por isso você tem que fazer um new Conta() em cada posição!

Conta é uma classe e, como toda classe, precisa ser instanciada para ser utilizada. Por isso, cada item do array precisa de uma nova instância de Conta.