Notice
Recent Posts
Recent Comments
Link
«   2024/07   »
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
Tags
more
Archives
Today
Total
관리 메뉴

기록

[JAVA] 변수 본문

공부/JAVA

[JAVA] 변수

aoieuo 2020. 7. 5. 01:00

<변수의 종류>

 - 클래스 변수 (= 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();
    }
}

JVM 메모리 구조

<Call Stack>

 : 메서드의 작업공간

   1) 메서드가 호출되면 메서드 수행에 필요한 메모리 공간을 할당한다.

   2) 메서드가 종료되면 메모리가 반환된다.

class CallStackTest
{
    public static void main(String[] args)
    {
        firstMethod();
    }
    static void firstMethod()
    {
        secondMethod();
    }
    static void secondMethod()
    {
        System.out.println("secondMethod()");
    }
}

Call Stack 순서 초록색은 메모리 할당, 주황색은 메모리 반환

<변수의 초기화>

 - 변수를 선언하고 처음으로 값을 저장하는 것

 - 멤버변수(인스턴스변수, 클래스변수)와 배열은 각 타입의 기본값으로 자동초기화됨

 - 지역변수는 사용 전에 반드시 초기화

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();
    }
}

클래스변수 cv와 인스턴스변수 iv의 초기화 과정

 

'공부 > 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
Comments