namespace study {
class Study1 {
public int a;
static void Main(String[] argv) {
int aa;
Console.WriteLine(a); //error
Console.WriteLine(aa);
}
void aaa() {
int a; //error
}
}
}
1. clr이 static을 가장 맨첨에 메모리에 올리고 Main호출 될 당시엔 멤버변수 a가 선언되지 않았을 때니 오류뜨는거임?
저럴때 되게 하려면 어케해야함?
2. 어떤 이유땜에 멤버변수는 자동초기화해주고 로컬은 안해주는 거임?
public static int a - dc Cpp
Study1.a - dc Cpp
내부 정적메서드에선 클래스명 생략 가능하던가 - dc Cpp
암튼 현재 a는 객체를 생성하고나서 접근해야됨. aaa는 객체의 멤버 함수로서 호출되기 때문에 a가 중복되니 에러 - dc Cpp
그러니까 메모리에 올라가는 타이밍이 문제인거지?
타이밍... 뭐 다 올라가있어도 안되는건 안되는거임. 객체랑 클래스에 대해 공부가 더 필요해보인다 - dc Cpp
맨첨에는 코드랑 static들 먼저 메모리에 올라가고 객체는 나중에 힙으로 할당되는데 main이 static이니까먼저 메모리에 올라가야하는데 그당시에 멤버변수는 아직 없을때니 오류 뜨는거 이렇게 보면 됨?
스태틱이 먼저 올라가긴 하니까 그런 접근이 불가능하긴 하겠다만 애초에 정적 메서드에서 비 정적 멤버에 접근하는게 논리적으로 맞지 않아서 내는 오류임 - dc Cpp
ㅇㅋㄷㅋ. 딱 알았음
저것은 컴파일 타임 에러라서 인텔리센스에서 친절하게 문제 원인과 해결책을 알려주고 있을텐데... 형 영어 못해? 그러면 한글패치라도 해서 에러나 워닝문구를 읽어.
정적 메서드에서 정적 변수를 참조해야한다고 친절하게 인텔리센스가 알려주고 있었을텐데 그걸 읽을 줄 몰라서 저런다니....
그게 아니라 왜 그런지 이유를 묻는거임. 어떤과정이 있어서 그런건지
2번은 생성자 찾아보고오셈. - dc Cpp