클래스에서 static이라는 키워드는 어떤 역할이에요?
조회수 3526회
소스코드
package hello;
public class Hello {
Clock clock = new Clock();
public static void main(String args[]) {
clock.sayTime();
}
}
이런 코드가 있었을때
에러메세지
Cannot access non-static field in static method main
이런 에러가 나오는데요.
그래서 static Clock clock = new Clock(); 이렇게 바꾸니까 잘 됩니다. static이 있고 없고의 차이가 뭔가요?
1 답변
-
static멤버는 특정한 객체에 속하는게 아니라 클래스 자체에 속합니다. 무슨 말이냐면 static은 모든 객체에서 하나만 존재해서 만약에 백만개의 인스턴스가 있어도 모든 인스턴스가 static 멤버 하나를 공유해서 쓰는 개념입니다.
또한 static 메소드도 특정한 객체에 속하지 않기때문에 인스턴스 멤버를 참조할수없습니다. 그래서 static멤버는 static메소드에서 밖에 참조되지 않습니다. 인스턴스 메소드는 static멤버를 참조할수있고요.
public class Example { private static boolean staticField; private boolean instanceField; public static void main(String[] args) { //static 메소드는 static멤버를 참조할수있습니다. staticField = true; // static메소드는 객체화됐을때 인스턴스 멤버에 접근할수있습니다. Example instance = new Example(); instance.instanceField = true; }
댓글 입력