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
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은 알 수 없기때문에 초기화를 하지 않습니다. (일걸요?)
의견을 남기기 위해서는 SLiPP 계정이 필요합니다.
안심하세요! 회원가입/로그인 후에도 작성하시던 내용은 안전하게 보존됩니다.
SLiPP 계정으로 로그인하세요.
또는, SNS 계정으로 로그인하세요.