Boa noite, Jose! Tranquilo? =)
Vamos lá... Quando você escreve o código abaixo, você está apenas determinando um tipo de "receita" para a criação de uma empresa:
class Empresa {
Funcionario[] empregados;
}
Basicamente, você está dizendo que toda empresa que for criada deverá ter um array de funcionários, que foi chamado de "empregados". Até aqui, beleza? =)
Agora para o teste, que é onde a coisa pega...
class Teste {
public static void main(String[] args) {
Empresa empresa = new Empresa();
empresa.empregados = new Funcionario[10];
}
}
A primeira linha dentro do método main
é a linha responsável por criar (instanciar) uma nova empresa. Então, quando fazemos new Empresa()
, estamos dizendo que queremos um objeto de acordo com a "receita" que informamos previamente, com class Empresa { ... }
, sacou?
Na linha seguinte, o que estamos fazendo? Bom... Na "receita", nós definimos que cada empresa deve ter um array de funcionários, que chamamos de empregados, certo? Mas... Quantos funcionários, exatamente, essa empresa pode ter? Repare que isso não foi informado na "receita" - nem deveria!
Portanto, quando escrevemos empresa.empregados = new Funcionario[10]
, estamos dizendo que queremos que o atributo empregados
, tenha 10 posições, ou seja, 10 espaços em branco para podermos adicionar funcionários. Quebrando isso em partes:
empresa
: representa o objeto que instanciamos, aquele ao qual desejamos adicionar os funcionários.
empregados
: representa o atributo de empresa
, por isso acessamos através de um ponto (.
).
new
: palavra reservada do Java, usada quando queremos instanciar objetos. Nesse caso, queremos criar um array, definir quantas posições ele terá.
Funcionario[10]
: array com 10 espaços para objetos do tipo Funcionario
.
Ficou mais claro essa parte?
No exemplo que você mencionou, você escrever as seguintes linhas de código:
Funcionario empregadoNovo = new Funcionario();
empregados[1] = empregadoNovo;
Vamos pensar no que essas duas linhas estão fazendo, começando do começo. Rs...
Funcionario
: tipo do objeto.
empregadoNovo
: nome da variável que guardará a referência para um funcionário.
new
: palavra reservada do Java para instanciar objetos.
Funcionario()
: após o new
, chamamos o construtor para criar o objeto que queremos.
Com essas quatro coisas em mente, podemos concluir que essa primeira linha está apenas criando um único objeto do tipo Funcionario
!
E a segunda?
Agora podemos ver que estamos tentando atribuir na segunda posição do array empregados
, o objeto que instanciamos na primeira linha... O único problema é que não temos um array chamado de empregados
, temos? Bom... Temos, mas como atributo da empresa!
Então, nosso código deveria ficar assim:
class Teste {
public static void main(String[] args) {
// Criando uma empresa.
Empresa empresa = new Empresa();
// Definindo que a empresa terá 10 funcionários.
empresa.empregados = new Funcionario[10];
// Criando um funcionário.
Funcionario empregadoNovo = new Funcionario();
// Adicionando o funcionário na empresa.
empresa.empregados[1] = empregadoNovo;
}
}
E aí... O que achou? Consegui sanar sua dúvida? =)
Ahh, só mais uma coisa... Lembre-se que um array começa na posição zero, por isso, quando escrevemos empresa.empregados[1]
, estamos acessando a segunda posição. Se quiséssemos a primeira:
empresa.empregados[0]
Belezinha? =)
Espero ter ajudado, mas se tiver qualquer dificuldade/dúvida, não hesite em postar aqui no fórum para que nós possamos ajudá-lo! =)
Abraço e bons estudos,
Fábio