728x90
인스턴스 멤버(인스턴스변수와 인스턴스메서드)는
반드시 객체를 생성한 후에만 참조 또는 호출이 가능하다.
따라서 클래스 멤버가 인스턴스멤버(인스턴스변수와 인스턴스메서드)를
참조, 호출하기 위해서는
반드시 객체를 생성하여야 한다.
(왜냐하면 인스턴스 멤버가 존재하는 시점에 클래스 멤버는 항상 존재하지만,
클래스 멤버가 존재할 때 인스턴스 멤버는 존재하지 않을 수도 있음
_JVM의 메모리 구조 참고https://letsgoit39.tistory.com/6)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
|
class MemberCall {
int iv = 10;
static int cv = 20;
int iv2 = cv;
// static int cv2 = iv; // 에러. 클래스변수는 인스턴스 변수를 사용할 수 없음.
static int cv2 = new MemberCall().iv; // 이처럼 객체를 생성해야 사용가능.
static void staticMethod1() {
System.out.println(cv);
// System.out.println(iv); // 에러. 클래스메서드에서 인스턴스변수를 사용불가.
MemberCall c = new MemberCall();
System.out.println(c.iv); // 객체를 생성한 후에야 인스턴스변수의 참조가능.
}
void instanceMethod1() {
System.out.println(cv);
System.out.println(iv); // 인스턴스메서드에서는 인스턴스변수를 바로 사용가능.
}
static void staticMethod2() {
staticMethod1();
// instanceMethod1(); // 에러. 클래스메서드에서는 인스턴스메서드를 호출할 수 없음.
MemberCall c = new MemberCall();
c.instanceMethod1(); // 인스턴스를 생성한 후에야 호출할 수 있음.
}
void instanceMethod2() { // 인스턴스메서드에서는 인스턴스메서드와 클래스메서드
staticMethod1(); // 모두 인스턴스 생성없이 바로 호출이 가능하다.
instanceMethod1();
}
}
|
cs |
위의 코드를 볼 때,
클래스멤버(클래스변수와 메서드)에서
인스턴스멤버(인스턴스변수와 메서드)를 참조, 호출하려면
객체를 생성해야만 가능하다는 사실을 확인하고 기억하고 넘어가자
728x90
'코딩 > JAVA' 카테고리의 다른 글
오버로딩(Overloading)_자바의정석 (0) | 2021.07.21 |
---|---|
JVM의 메모리 구조_자바의 정석 (0) | 2021.07.21 |
메서드_재귀호출(recursive call)_자바의정석 (0) | 2021.07.20 |
반환타입이 참조형인 메서드란?_자바의정석예제 (0) | 2021.07.20 |
반환값(return)이 없는 메서드 응용_자바의정석예제 (0) | 2021.07.19 |