* 선언위치에 따른 변수
▶ 인스턴스변수(instance variable)
- 각 인스턴스의 개별적인 저장공간. 인스턴스마다 다른 값 저장가능
- 인스턴스 생성 후, ‘참조변수.인스턴스변수명’으로 접근
- 인스턴스를 생성할 때 생성되고, 참조변수가 없을 때 가비지컬렉터에 의해자동제거됨
▶ 클래스변수(class variable)
- 같은 클래스의 모든 인스턴스들이 공유하는 변수
- 인스턴스 생성없이 ‘클래스이름.클래스변수명’으로 접근
- 클래스가 로딩될 때 생성되고 프로그램이 종료될 때 소멸
▶ 지역변수(local variable)
- 메서드 내에 선언되며, 메서드의 종료와 함께 소멸
- 조건문, 반복문의 블럭{} 내에 선언된 지역변수는 블럭을 벗어나면 소멸
1.
class Tv {
int a = channel;
static int channel = 10;
}
정상실행
static변수가 먼저 자리를 잡고 인스턴트 변수가 자리를 잡으므로
2.
class Tv {
int a = 10;
static int channel = a;
}
ERROR
static변수가 먼저 자리를 잡으므로 a가 생성되기 전에 값을 넣어줄 수 없다
3.
class Card {
String kind;
int num;
static int width;
static int height;
}
class TvMain{
public static void main(String[] args) {
Card c1 = new Card();
Card c2 = new Card();
c1.kind = "heart";
c1.num = 7;
c2.kind = "spade";
c2.num = 5;
Card.width = 100;
c1.height = 150;
System.out.println(c1.kind +" "+ c1.num +" "+ c1.width +" "+ c1.height);
}
}
heart 7 100 150