Obrigado, Marcelo.
Vou destacar somente a classe Emprsa, que tem o seu array:
class Empresa{
String nome;
int CNPJ;
Funcionario[] Fun = new Funcionario[10];
void adicionar(Funcionario A){
for(int X=0;X<11;X++){
this.Fun[X]=A;
}
}
}
Note que Fun se trata de um atributo da classe Empresa. Nesse caso, você não pode instanciar depois. O código abaixo causa erro:
class Empresa{
String nome;
int CNPJ;
Funcionario[] Fun;
Fun = new Funcionario[10]; // erro aqui
void adicionar(Funcionario A){
for(int X=0;X<11;X++){
this.Fun[X]=A;
}
}
}
O erro ocorre ali, pois estamos no escopo da classe. Para instanciar o vetor, você tem três escolhas:
1) Declarar e instanciar o atributo, tudo numa linha só. Como está no seu exemplo.
2) Declarar o atributo e, num construtor (você vai ver isso depois) instanciar o vetor. Exemplo:
public class Empresa {
String nome;
int CNPJ;
Funcionario[] Fun;
public class Empresa() {
this.Fun = new Funcionario[10];
}
void adicionar(Funcionario A){
for(int X=0;X<11;X++){
this.Fun[X]=A;
}
}
}
3) Instanciar o atributo em um método, o que, nesse caso, não é recomendado. A comparação que você fez com um vetor de tipo primitivo foi porque você, provavelmente, fez isso dentro de um método, como o main:
class Teste{
public static void main(String[] args) {
int[] inteiros;
inteiros = new int[10]; // aqui funciona porque está dentro de um método
(...)
}
}
Isso responde sua dúvida?
OBS: Recomendo que reveja seu código com relação à convenção. Nomes de atributos e variáveis começam com letra minúscula. Isso pode confundir e incomodar outras pessoas que trabalharem contigo. Letras maiúsculas em Java indicam uma Classe ou Interface.