Solucionado (ver solução)
Solucionado
(ver solução)
5
respostas

Dúvida no Ex. 7 da Aula 3 - Começando com Orientação a objetos

Por que o código abaixo não está compilando? Está gerando erro de null pointer exception.


public class Funcionario {
    String nome;
    String departamento;
    double salario;
    String rg;
    double ganhoanual;
    Data dataDeEntrada;

    void recebeAumento(double valor) {
        this.salario = this.salario + valor;
    }

    double calculaGanhoAnual() {
        return salario * 12;
    }

    void mostra() {        
        System.out.println("Nome: " + this.nome);
        System.out.println("Deepartamento: " + this.departamento);
        System.out.println("Salário: " + this.salario);
        System.out.println("Dia Entrada: "+this.dataDeEntrada.dia);
        System.out.println("Mês Entrada: "+this.dataDeEntrada.mes);
        System.out.println("Ano de Entrada: "+this.dataDeEntrada.ano);
        System.out.println("RG: " + this.rg);
        System.out.println("Salário Anual: "+calculaGanhoAnual());
    }

}

public class Data {

    int dia;
    int mes;
    int ano;

    void mostraData(int dia, int mes, int ano) {
        this.dia = dia;
        this.mes = mes;
        this.ano = ano;
    }

}

public class TestaFuncionario {

    public static void main(String[] args) {

    Funcionario f1 = new Funcionario();
    f1.nome = "Mariana";
    f1.departamento="Financeiro";
    f1.salario = 300;
    f1.rg="4343";

    f1.recebeAumento(50);

    f1.dataDeEntrada.dia=11;
    f1.dataDeEntrada.mes=07;
    f1.dataDeEntrada.ano=1965;



    f1.mostra();



    }
}
5 respostas
solução!

Olhando seu código bem rapidamente, você tá tentando passar um valor em null, ou seja, em branco.

Abaixo da criação do objeto Funcionário adicione a seguinte linha:

Funcionario f1 = new Funcionario();
f1.dataDeEntrada = new Data();

Boa sorte, e bons estudos.

Muito obrigado! Funcionou.

Só para que eu assimile melhor, poderia esclarecer outra dúvida? Então toda vez que precisarmos utilizar um atributo de outra classe devemos criar uma nova instância (new)? No caso f1 é uma referência para a classe Funcionário que possui um atributo com tipo de outra classe (Data), por essa razão não podemos atribuir valores utilizando somente a referência f1.Funcionario.dataDeEntrada.dia. É isso?

Bom dia.

É mais ou menos isso! Só procure entender melhor a orientação a objetos.

No caso do f1, ele é uma referência do objeto que foi criado, ou seja, Funcionário.

Dentro da classe Funcionário você cria um atributo que pertence a classe Data, certo?

Para fazer essa navegação é necessário criar a instância do objeto para aquilo que você quer usar.

Foi exatamente o que fizemos criando um objeto novo do tipo new Date();

Valeu, Felipe! Obrigado.

o resultado inicial é nulo, após efetuada a instancia a aplicação executa normalmente