기록
[JAVA] 변수 본문
<변수의 종류>
- 클래스 변수 (= Static 변수, Class variable)
: 같은 클래스의 모든 인스턴스들이 공유하는 변수이다. → 모든 인스턴스가 하나의 저장공간을 공유한다.
인스턴스 생성없이 'className.variableName'으로 접근
클래스가 로딩될 때 생성되고 프로그램이 종료될 때 소멸된다.
- 인스턴스 변수 (Instance variable)
: 각 인스턴스의 개별적인 저장공간
인스턴스마다 다른 값을 저장할 수 있다
인스턴스 생성 후, 'referenceName.variableName'으로 접근
인스턴스를 생성할 때 생성되고, 참조변수가 없을 때 garbage collector에 의해 자동으로 제거된다.
- 지역변수 (Local variable)
: 메서드 내에 선언되며, 메서드의 종료와 함께 소멸된다.
조건문, 반복문의 블럭{} 내에 선언된 지역변수는 블럭을 벗어나면 소멸된다.
class Variables
{
int iv;
static int cv;
void method()
{
int lv = 0;
}
}
class VariablesTest
{
public static void main(String[] args)
{
Variables v = new Variables();
v.method();
}
}
<Call Stack>
: 메서드의 작업공간
1) 메서드가 호출되면 메서드 수행에 필요한 메모리 공간을 할당한다.
2) 메서드가 종료되면 메모리가 반환된다.
class CallStackTest
{
public static void main(String[] args)
{
firstMethod();
}
static void firstMethod()
{
secondMethod();
}
static void secondMethod()
{
System.out.println("secondMethod()");
}
}
<변수의 초기화>
- 변수를 선언하고 처음으로 값을 저장하는 것
- 멤버변수(인스턴스변수, 클래스변수)와 배열은 각 타입의 기본값으로 자동초기화됨
- 지역변수는 사용 전에 반드시 초기화
class InitTest {
int x; //instacne variable
int y = x; //instance variable
void method1() {
int i; //local variable
int j = i; //!compile error
}
}
- 멤버변수의 초기화
1) 명시적 초기화(explicit initialization)
2) 생성자(constructor) 사용
3) 초기화 블럭(initialization block)
- 인스턴스 초기화 블럭: { }
- 클래스 초기화 블럭: static { }
- 초기화 블록
1) 클래스 초기화 블럭: 클래스 변수의 복잡한 초기화에 사용되며 클래스가 로딩될 때 실행된다
2) 인스턴스 초기화 블럭: 생성자에서 공통적으로 수행되는 작업에 사용된다.
인스턴스가 생성될 때, 생성자보다 먼저 실행된다!
class StaticBlockTest {
static int[] arr = new int[10];
static { //static initialization block!
for(int i = 0; i < arr.length; i++){
arr[i] = (int)(Math.random()*10) + 1;
}
}
//...
}
- 멤버변수 초기화 단계
- 클래스변수 초기화 시점: 클래스가 처음 로딩될 때 단 한 번
- 인스턴스변수 초기화 시점: 인스턴스가 생성될 때마다
class InitTest {
static int cv = 1;
int iv = 1;
static { cv = 2; } //class initialization block
{ iv = 2; } //instance initialization block
InitTest() { iv = 3; } //constructor
public static void main(String[] args) {
InitTest it = new InitTest();
}
}
'공부 > JAVA' 카테고리의 다른 글
[JAVA] 메서드 (0) | 2020.07.06 |
---|---|
[JAVA] 생성자 (0) | 2020.07.04 |
[JAVA] 클래스와 객체 (0) | 2020.07.04 |
[JAVA] 조건문과 반복문 (0) | 2020.07.04 |
[JAVA] 자바 개요 (0) | 2020.07.04 |