null은 가리키는 대상이 없거나, 나중에 입력하고 싶을때 사용된다.
nullPointerException은 null이 없는 곳(참조 주소가 없음)을 찾아갈 때 발생한다.
NullPointerException 이해하기
[p.23 / Data 클래스]
public class Data {
int value;
}
[p.26 / 지역 변수 내 NullPointerException] NullPointerException 이해하기
public static void main(String[] args) {
Data data = null;
data.value = 10; //NullPointerException발생 = 주소가 없는 곳을 찾아감
System.out.println("data.value = " + data.value);
}
>> 출력값
Exception in thread "main" java.lang.NullPointerException: Cannot assign field "value" because "data" is null
at ref.NullMain.main(NullMain.java:7)
[p.29 / NullPointerException 해결 방법] 객체 생성 추가 (← ← : 파고들기로 이해)
public static void main(String[] args) {
BigData bigData = new BigData();
bigData.data = new Data(); //data변수에 객체 생성을 넣어준다.
System.out.println("bigData.count = " + bigData.count);
System.out.println("bigData.data = " + bigData.data);
System.out.println("bigData.data.value = " + bigData.data.value);
}
[p.23 / Data 클래스]
public class Data {
int value;
}
[p.27 / BigData 클래스] 단순 멤버 번수 선언시 자동 초기화 된다
public class BigData {
Data data; //Data data = null;의 의미로 사용된다. (자동초기화) 즉 단순 변수 선언
int count;
}
- int = 0;
- boolean = false;
- 참조형 = null;
[p.27 / 멤버 변수 내 NullPointerException] null값에 참조할 내역이 없으므로 NullPointerException이 걸린다.
public static void main(String[] args) {
BigData bigData = new BigData();
System.out.println("bigData.count = " + bigData.count);
System.out.println("bigData.data = " + bigData.data); //null
//nullpointerexception
System.out.println("bigData.data.value = " + bigData.data.value);
}
>> 출력값
bigData.count = 0
bigData.data = null
Exception in thread "main" java.lang.NullPointerException: Cannot read field "value" because "bigData.data" is null
at ref.NullMain3.main(NullMain3.java:9)
BigData에 null값이 아니었다면?
[p.27 / BigData 클래스]
public class BigData {
Data data = new Data();
int count;
}
>> 출력값
bigData.count = 0
bigData.data = ref.Data@312b1dae
bigData.data.value = 0
Null 이해하기
[p.23 / Data 클래스]
public class Data {
int value;
}
[p.23 / Null값 할당] Null 이해하기
public static void main(String[] args) {
Data data = null; //null -> 값이 없다. 참조값의 위치가 없다
System.out.println("1. data = " + data);
data = new Data(); //설계툴 -> 인스턴스/객체 생성
System.out.println("2. data = " + data);
data = null; //null -> 값이 없다. 참조값의 위치가 없다
System.out.println("3. data = " + data);
}
>> 출력값
1. data = null
2. data = ref.Data@1d81eb93
3. data = null
Gc(카비지 컬렉션)은 참조하지 않는 인스턴스가 있을 경우 자동으로 메모리에서 제거해준다.
'Java > [inflearn] 자바 기본' 카테고리의 다른 글
[김영한_자바기본][2.기본형과 참조형] 상품 주문 시스템 개발_문제 풀이 해석 보충 (p.30-34) (2) | 2024.02.06 |
---|---|
[김영한_자바기본][3. 객체 지향 프로그래밍] 매서드 보충 (0) | 2024.02.05 |
[김영한_자바기본][1.클래스와 데이터] (보충) 클래스 도입/객체 사용/ 배열 도입 (p.16-34) (2) | 2024.02.02 |
[김영한_자바기본][2.기본형과 참조형] 기본형 / 참조형 이해 (p.1-6) (0) | 2024.01.25 |
[김영한_자바기본][1.클래스와 데이터] 클래스 도입, 객체 이해하기(인스턴스) (p.15-23) (0) | 2024.01.24 |