궁금한 부분이 있습니다

2015-01-28 16:22

package Test;

public class Test01 {

 static String q;
 static int e;
 static boolean w;


public static void main(String[] args) {    
    int a;
    boolean b;
    String c;
    System.out.println(a);
    System.out.println(e); 
}

} JAVA 꿈나무입니다. 이클립스에서 이 부분에서 a를 출력시 에러가 나오지만 e부분을 출력시에는 에러가 나오지가 않습니다 어떤 부분이 다른지 정확하게 잘 모르겠습니다. 의견 부탁드립니다.

1개의 의견 from SLiPP

2015-01-29 09:43

q,e,w 는 field variable 라고 표현하며 jvm의 heap memory에 올라가는 변수여야 합니다. 다만 앞에 static 키워드를 붙여주었으니 static memory에 올라가는 변수가 되겠네요. a,b,c 는 local variable 라고 표현하며 jvm의 stack memory에 올라가는 변수입니다.

heap, static memory에 올라가는 기본형 변수들은 초기화가 됩니다. 그러나 stack memory에 올라가는 변수들은 초기화되지 않습니다.

stack memory 의 특성은 push, pop 등을 하며 어떤 목적을 가지고 계산을 합니다. 즉 local variable은 프로그래머가 어떤 목적을 가지고 선언을 하며 그 목적은 계산입니다. 즉, data를 선언할 때 이미 목적을 가지고 있기 때문에 분명 data를 할당할 것이라 생각하기때문에 설계차원에서 초기화를 하지 않습니다. (일걸요?) 대신 heap memory에는 기본으로 초기화를 해줍니다. 그 값이 무엇이든 클래스가 처음 생성될 때 가지게 되는데 그것은 data 자체라고 보기 때문입니다. 목적이 계산이 아니라 하나의 엔티티(=객체)로서 의미를 가지기 때문입니다. 다만 q,e,w 가 class라면 어떤 엔티티를 연결해주어야할지 jvm은 알 수 없기때문에 초기화를 하지 않습니다. (일걸요?)

의견 추가하기

연관태그

← 목록으로