JAVA/JAVA 기초 문법

[java] java.lang.NullPointerException 에러 heap 메모리 지정

코끼리똥11 2024. 6. 4. 11:57

 

Main.java

package main;


import Membercontroller.MemberController;
import medel.Member;

public class AddressMain {

	public static void main(String[] args) {
		MemberController mc = new MemberController();
		Member member = new Member("홍길동","010");
		mc.memberList.add(member);
	}

}

 

member.java

package medel;

public class Member {
	public String name;
	public String Phone;
	
	public Member(){
		
	}
	public Member(String name, String phone) {
		this.name = name;
		this.Phone = phone;
	}

}

 

MemberController.java

package Membercontroller;

import java.util.ArrayList;

import medel.Member;

public class MemberController {
	public ArrayList<Member> memberList;
}

 

 

이렇게 코드를 짯을때 실행하면

 

Exception in thread "main" java.lang.NullPointerException: Cannot invoke "java.util.ArrayList.add(Object)" because "mc.memberList" is null
	at main.AddressMain.main(AddressMain.java:21)

엔드포인트 에러가 뜬다. 

이 코드에서 에러가 뜬 이유는 MemberController 에서  public ArrayList<Member> memberList; 부분에 객체가 생성이 되지 않았기 때문에 

 

main 함수에서 mc.memberList.add(member); 코드에서 mc 변수에 memberList 라는 객체를 불러올 수 없기 때문이다.

따라서 memberList의 객체를 생성해줘야한다.

 

MemberController.java

package Membercontroller;

import java.util.ArrayList;

import medel.Member;

public class MemberController {
	public ArrayList<Member> memberList = new ArrayList<>();

	//HashMap<String,ArrayList<Member>> addressMap;
}

memberList를 ArratList 데이터 타입 를 사용하여 Member 객체들을 저장하는 리스트를 만든다. 즉,new 키워드를 사용하여 heap 메모리에 객체를 생성해줘야한다,

 

 

 

Member 클래스의 데이터 타입을 가진 m 이라는 변수명을 지정하고 memberList에 안 에있는 값을 출력하면

오류 없이 출력이 가능하다.