예시)
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 |