java – I have an error that I can't identify in println

Question:

These are my classes but the error still occurs:

Exception in thread "main" java.lang.NullPointerException at employee20.Main.main(Main.java:16) /home/lucas/.cache/netbeans/8.1/executor-snippets/run.xml:53: Java returned: 1 BUILD FAILED (total time: 0 seconds) Follow my code:

Classe Principal:

public class Principal {

    public static void main(String[] args) {

        Funcionario lucas = new Funcionario();
        lucas.setSalario(1856.85);
        lucas.setEndereco("Rua Frei Caneca");
        lucas.setEstadoCivil("Solteiro");
        lucas.setNomeDoDepartamento("Auxiliar");

        lucas.pessoa = new Pessoa();
        lucas.pessoa.setNome("Lucas Alves Cardoso de Jesus");
        lucas.pessoa.setRg(123456891);

        lucas.data.setDatadia(13);
        lucas.data.setDatames(05);
        lucas.data.setDiaano(94);

        lucas.getAnual();

        System.out.println(lucas.getEndereco());

    }

}

Official Class

public class Funcionario {

    private String NomeDoDepartamento;
    private double Salario;
    private double anual;
    private String EstadoCivil;
    private String Endereco;
    int proximo = 0;
    Pessoa pessoa;
    Data data;


    //get obter set mudar

    public String getNomeDoDepartamento(){
        return this.NomeDoDepartamento;
    }

    public void setNomeDoDepartamento(String nomedepartamento){
        this.NomeDoDepartamento = nomedepartamento;
    }

    public double getSalario(){
        return this.Salario;
    }

    public void setSalario (double salario){
        this.Salario = salario;
    }

    public double getAnual(){
        return this.Salario*12;
    }

    public String getEstadoCivil(){
        return this.EstadoCivil;
    }

    public void setEstadoCivil(String estadocivil){
        this.EstadoCivil = estadocivil;
    }

    public String getEndereco(){
        return this.Endereco;
    }

    public void setEndereco (String endereco){
        this.Endereco = endereco;
    }


}

Answer:

You didn't set the data property before line 16 of your main class:

lucas.data = new Data();
lucas.data.setDatadia(13);

Other than that I have at least 2 tips to give you:

1) Use the constructor to set new objects or create auxiliary constructors:

public Funcionario() {
  this.pessoa = new Pessoa();
  this.data = new Data();
}

WHERE

public Funcionario(){} // construtor padrão

public Funcionario(Pessoa pessoa) {
  this.pessoa = pessoa;
}
public Funcionario(Data data) {
  this.data = data;
}
public Funcionario(Pessoa pessoa, Data data) {
  this.pessoa = pessoa;
  this.data = data;
}

Thus allowing:

Funcionario funcionario = new Funcionario(); 
// funcionário padrão, sem Pessoa e Data

Funcionario funcionario = new Funcionario(new Pessoa()); 
// funcionário com Pessoa e sem Data

Funcionario funcionario = new Funcionario(new Data()); 
// funcionário sem Pessoa e com Data

Funcionario funcionario = new Funcionario(new Pessoa(), new Data); 
// funcionário com Pessoa e Data

2) Do not use direct access to these properties, always use setters and getters :

public Pessoa getPessoa() {
  return this.pessoa;
}

public void setPessoa(Pessoa pessoa) {
  this.pessoa = pessoa;
}
Scroll to Top