todos objetos em Java são alocados dinamicamente na memória, oq significa q quando vc cria um objeto
ItensEstoque Itens = new ItensEstoque();
vc esta criando uma variavel Itens que funciona como um ponteiro apontando para uma área na memoria onde o novo objeto ItensEstoque foi alocado, portanto quando vc usa
Itens.setNome(“Fulano”)
vc esta alterando o objeto q esta sendo apontado pela variavel Itens.
Quando vc faz
ArrayItens[x] = Itens
vc n esta jogando o objeto para a variavel ArrayItens[x], está apenas fazendo que ArrayItens[x] aponte para o mesmo objeto q Itens.
No seu programa vc instancia um objeto no inicio
ItensEstoque Itens = new ItensEstoque();
depois vc trabalha sempre com este objeto. Oq esta acontecendo é o seguinte:
1- Vc cria um objeto e ele é referenciado pela variavel Itens:
ItensEstoque Itens = new ItensEstoque();
2- Vc modifica os atributos do objeto referenciado pela variavel Itens:
Itens.setNome(“Fulano”)
3- Vc passa a referencia a este objeto para a variavel ArrayItens[0]:
ArrayItens[0] = Itens
*(agora vc tem 2 variaveis apontando para o mesmo objeto, Itens e ArrayItens[0])
Esse é o ciclo basico do seu programa, oq acontece é q em uma próxima interação do loop vc vai direto para o passo 2, portanto vc esta alterando as propriedades do mesmo objeto, depois vc passa a mesma referencia para ArrayItens[1,2…n], isso faz com q todos itens do seu array apontem para o mesmo objeto.
Para resolver isso basta vc trocar a linha
ItensEstoque Itens = new ItensEstoque();
por
ItensEstoque Itens;
Com isso vc cria a variavel q vai apontar para um objeto ItensEstoque mas n cria nenhum objeto;
então antes da 1ª linha do loop que utiliza o objeto como
Itens.setNome(“Fulano”)
vc coloca
Itens= new ItensEstoque();
isso vai sempre criar um novo objeto e fazer a variavel apontar para ele,
ai no final do loop quando vc faz ArrayItens[x]= Itens, vc vai estar passando para ArrayItens[x] este novo objeto!
OK?
Qualquer coisa Grita!!!