클래스에서 static이라는 키워드는 어떤 역할이에요?


소스코드

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이 있고 없고의 차이가 뭔가요?

  • 2016년 01월 22일에 작성됨

조회수 230


1 답변


좋아요
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;
    }
  • 2016년 01월 22일에 작성됨

로그인이 필요한 기능입니다.

Hashcode는 개발자들을 위한 무료 QnA사이트 입니다. 작성한 답변에 다른 개발자들이 댓글을 작성하거나 좋아요/싫어요를 할 수 있기 때문에 계정을 필요로 합니다.
► 로그인
► 계정만들기
Close