클래스의 필드(field)란 클래스에 포함된 변수(variable)를 의미힌다.
클래스 영역에 위치한 변수 중에서 static 키워드를 가지는 변수.
클래스가 메모리에 올라갈 때 생성되며, 프로그램이 종료될 때 소멸된다.
즉 new를 통해 메모리 할당을 받지 않아도 사용 가능하다.
로딩되는 순간 메모리 할당이 이루어지며[클래스이름.객체]를 통해 접근한다.
모든 인스턴스가 같은 값을 공유하며 값이 수정되면 클래스 변수에 반영이 된다.
클래스 영역에 위치한 변수 중 static 키워드를 가지지 않는 변수.
각 인스턴스마다 고유한 값을 가지고 있다.
인스턴스가 생성될 때 생성되며 힙 영역에 저장된다. 인스턴스가 소멸될 때 소멸된다.
인스턴스 메소드는 new를 통해서만 접근이 가능하고 클래스 메소드에서는 접근이 불가능하다.
메소드나 생성자, 초기화 블록 내에 위치한 변수.
블록 내에서 변수의 선언문이 실행될 때 생성되며 스택 영역에 저장된다. 블록을 벗어날 때 소멸된다.
class FieldTest {
static int classVariable = 10; // 클래스 변수 선언
int instanceVariable = 20; // 인스턴스 변수 선언
}
public class Test {
public static void main(String[] args) {
//인스턴스 생성 전에 클래스 변수 호출 가능
System.out.println(FieldTest.classVariable);
FieldTest ft = new FieldTest();; // 인스턴스 생성
//인스턴스 변수 호출
System.out.println(ft.instanceVariable);
}
}