Ola pessao, ja faz um bom tempinho que to tentando entender onde esta o erro mas nao consigo.
Quando eu executo o codigo, o programa me mostra o primeiro funcionario tudo certinho, mas com o segundo aparece o seguinte:
Nome: null
Departamento: null
Exception in thread "main" java.lang.NullPointerException 
at Funcionario.mostra(Funcionario.java:20) 
at TesteEmpresa.main(Funcionario.java:88)
MEU CODIGO COMPLETO:
        class Funcionario{
            String nome;
            String departamento;
            double salario;
            Data dataDeEntrada;
            String rg;
            void aumento(double valorAumento){
                this.salario += valorAumento;
            }
            double ganhoAnual(){
                return this.salario * 12;
            }
            void mostra(){
                System.out.println("Nome: " + this.nome);
                System.out.println("Departamento: " + this.departamento);
                System.out.println("Data de entrada: " + this.dataDeEntrada.getFormatada());
                System.out.println("RG: " + this.rg);
                System.out.println("Salario: " + this.salario);
                System.out.println("Ganho anual: " + this.ganhoAnual());
                System.out.println(" " );
            }
        }
        class Data{
            int dia;
            int mes;
            int ano;
            void preencheData (int dia, int mes, int ano){
                this.dia = dia;
                this.mes = mes;
                this.ano = ano;
            }
            String getFormatada(){
                return this.dia + "/" + this.mes + "/" + this.ano;
            }
        }
        class Empresa{
            String nomeEmpresa;
            String cnpj;
            Funcionario[] empregados;
            int livre = 0;
            void adiciona(Funcionario f){
                this.empregados[this.livre] = f;
                this.livre++;
            }
        }
        class TesteEmpresa{
            public static void main(String[] args){
                Empresa empresa = new Empresa();
                empresa.empregados = new Funcionario[10];
                Funcionario f1 = new Funcionario();
                        f1.dataDeEntrada = new Data();
                f1.dataDeEntrada.preencheData(8, 3, 2015);    
                f1.nome = "Hugo";
                f1.departamento = "TI";
                f1.salario = 100;
                f1.rg = "ABCD1234";
                f1.aumento(50);
                empresa.adiciona(f1);
                Funcionario f2 = new Funcionario();
                f1.dataDeEntrada = new Data();
                f1.dataDeEntrada.preencheData(8, 3, 2015);    
                f1.nome = "Jeferson";
                f1.departamento = "TI";
                f1.salario = 500;
                f1.rg = "ABCE1234";
                f1.aumento(100);
                empresa.adiciona(f2);
                empresa.empregados[0].mostra();
                empresa.empregados[1].mostra();
            }
        }