본문 바로가기

Java

Try~Catch문, NullPointException 에러

예시)

package model;

import java.util.ArrayList;

public class Student {
	
	public String name;
	public ArrayList<String> subjectList;
	
}

package main;

import model.Student;

public class Main {

	public static void main(String[] args) {
		
	Student	s1 = new Student();
	
        s1.name = "홍길동";
        s1.subjectList.add("자바");

   }

}

▷ 위의 코드를 실행하면 에러가 난다!

▶ 이럴 땐, try ~ catch문을 이용해서 서비스를 이용하는 유저에게 에러가 났다고 알려줘야한다.

package main;

import model.Student;

public class Main {

	public static void main(String[] args) {
	
		Student	s1 = new Student();
		
		try {
			s1.name = "홍길동";
			s1.subjectList.add("자바");
		}catch (Exception e) {
			System.out.println("고객님, 에러발생했습니다.");
			System.out.println(e.toString());
	
		}finally { // finally는 파이썬에도 있다
			System.out.println("finally 실행됨");
		}
		
		
	}

}
더보기

try: 에러가 날만한 코드가 있는 부분을 try로 둘러싼다.
catch: try 부분에서 에러가 발생하면, 원래는 프로그램 종료된다.
하지만 try/ catch를 이용하면, catch영역에서 프로그램 종료없이 에러를 처리해줄 수 있다.
finally: try에서 정상 수행을 했든, catch에서 에러가 발생했든, 무조건 finally영역에 있는 코드는 실행된다.


● 그렇다면 위의 NullPointException에러는 왜 생긴걸까?

○ 그 이유는 ArrayList는 클래스이므로 해당 메모리 공간을 형성해줘야하는데 그과정에대한 코드가 적혀있지 않기 때문이다. 따라서 다음과같은 방법으로 해결할 수 있다.

package model;

import java.util.ArrayList;

public class Student {
	
	public String name;
	// ArrayList의 공간을 형성해라
	public ArrayList<String> subjectList = new ArrayList<>(); // 첫번째방법
	
	//두번째방법 생성자로 메모리 만들어주기 (오버로딩으로 다른사람코드 활용하는일이 많으면 생성자 안쓰니까 이방법또한 잘 안쓸 수도 있다)
	public Student() {
		subjectList = new ArrayList<>();
	}
}

 

'Java' 카테고리의 다른 글

문자열 관련 함수  (0) 2023.11.16
HashMap  (0) 2023.07.04
Array(배열), Integer  (0) 2023.07.04
ArrayList  (0) 2023.07.04
인터페이스(Interface)  (0) 2023.07.04