[RESOLVIDO] Atributo com valor NULL

Bom dia a todos!

Sou iniciante em programação e estou tendo uma dificuldade com um exercício simples que estou fazendo, onde o mesmo consiste em cadastrar o nome de uma pessoa através de um menu e também consultar o cadastro, porem ao consultar o cadastro a variável esta retornando null, gostaria de intender o que pode estar o ocorrendo.
Segue o código.

package contabancaria;

import java.util.Scanner;

public class ContaBancaria {
    public static void main(String[] args) {
        Menu m1 = new Menu();  
        m1.menu();     
    }    
}

//Classe Menu

private int opmenu;
Scanner opm = new Scanner(System.in); 
CadPessoa cad1 = new CadPessoa();

public void menu(){
    
    System.out.println("==========Menu==========");
    System.out.println("1 - Fazer cadastro ");
    System.out.println("2 - Acessar conta ");
    System.out.println("3 - Sair ");
    
    this.opmenu = opm.nextInt();

    if(opmenu == 1){
      
        cad1.cadpessoa();
      
    }
    
     if(opmenu == 2){
      
        System.out.println("Seu nome é "+cad1.getNomep());
        
    }     
    else {
        System.out.println("Você saiu");
    }
}   

}

//Classe CadPessoa

public class CadPessoa {

private String nomep = this.nomep;
private int idadep;

Scanner op = new Scanner (System.in);

public void cadpessoa(){
      
  
    System.out.println("Digite seu nome:");
  
  this.nomep = op.nextLine();
            
    System.out.println("Cadastro realizado com sucesso ");
    
    Menu m1 = new Menu();
    System.out.println("\r\n");
    
    m1.menu(); //Retorna para o menu 
    
}

public String getNomep() {       
    return this.nomep;                 
}

Minha duvida é o seguinte, depois de cadastrar e retornar para o menu onde tem a opção Acessar Conta onde o mesmo deveria trazer o valor da variável nomep, porem retorna null. “Seu nome é null”, sei que existem outras maneiras de fazer o mesmo exercício, mas gostaria de intender o por que de não estar trazendo o valor na variável.

Desde ja, Obrigado .

Seguinte: Null (Nulo) GERALMENTE é instanciação de objeto sem valor. O que isso significa? Significa que aqui:

Você está criando um novo objeto, e os valores que você definiu vão para nulo. Por isso o nome é null.

Dica: Você não precisa chamar um novo menu se você usar laços de repetição. Think about it!

Eu aconselho que você TENTE FAZER SOZINHO, mas como hoje eu to bonzinho, vou postar a solução aqui. Todavia, TENTE SOZINHO! Orientação à objetos não se aprende copiando da internet.

E aí, já tentou?

Confere então. Você só precisa mudar a classe Menu.java

import java.util.Scanner;

class Menu {
    private int opmenu;

    Scanner opm = new Scanner(System.in);
    CadPessoa cad1 = new CadPessoa();

    public void menu() {
        do {
            System.out.println("==========Menu==========");
            System.out.println("1 - Fazer cadastro ");
            System.out.println("2 - Acessar conta ");
            System.out.println("3 - Sair ");

            this.opmenu = opm.nextInt();

            if (opmenu == 1) {

                cad1.cadpessoa();

            }

            if (opmenu == 2) {

                System.out.println("Seu nome é " + cad1.getNomep());

            }
        } while (opmenu != 3);
            System.out.println("Você saiu");
    }
}
1 curtida

Opa obrigado mano, vou tentar aqui.

public class Menu {

private int opmenu;

Scanner opm = new Scanner(System.in); 
 
public void menu(){
    do{
    System.out.println("==========Menu==========");
    System.out.println("1 - Fazer cadastro ");
    System.out.println("2 - Acessar conta ");
    System.out.println("3 - Sair ");
    
    this.opmenu = opm.nextInt();
    
    CadPessoa cad1 = new CadPessoa();
                  
    if(opmenu == 1){
        
        cad1.cadpessoa();
       ///1 cad1.setNomep(opm.nextLine());
    }
    
    else if(opmenu == 2){
        //JOptionPane.showMessageDialog(null, "Seu nome é "+cad1.getNomep());
        System.out.println("Seu nome é "+ cad1.getNomep());
        
    }     
    else {
        System.out.println("Você saiu");
    }
    
    }while (opmenu == 1 || opmenu == 2);
    }
}

Fiz dessa forma retirei o codigo que cria novamente o objeto menui, porem ainda sim continua retornando null, vou continuar tentando aqui .

Consegui kkkk

estava colocando CadPessoa cad1 = new CadPessoa(); dentro do laço.

Exatamente, nesse caso ele ia instanciar novo objeto e ele viria null, hahaha