Notice
Recent Posts
Recent Comments
«   2024/09   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30
Archives
Today
Total
관리 메뉴

충분히 쌓여가는

6.9 인스턴스 멤버 - 인스턴스 멤버 사용 불가 본문

이것이 자바다/06 클래스

6.9 인스턴스 멤버 - 인스턴스 멤버 사용 불가

빌드이너프 2024. 4. 1. 23:16

정적 메소드와 정적 블록은 객체가 없어도 실행된다는 특징 때문에

내부에 인스턴스 필드나 인스턴스 메소드를 사용할 수 없다

또한 객체 자신의 참조인 this도 사용할 수 없다

public class ClassName {
  int field1;
  void method1() {...}
  
  //정적 필드와 메소드 선언
  static int field2;
  static void method2 { ... }
  
  //정적 블록 선언
  static {
    field1 = 10; //컴파일 에러
    method1(); //컴파일 에러
    field2 = 10;
    method2();
  }
  
  //정적 메소드 선언
  staitc void method3() {
    this.filed1 = 10; //컴파일 에러
    this.method1(); //컴파일 에러
    field2 = 10;
    method2();
  }
}

 

정적 메소드와 정적 블록에서 인스턴스 멤버를 사용하고 싶다면 객체를 먼저 생성하고 참조 변수로 접근해야 한다

static void method3() {
  //객체 생성
  ClassName obj = new ClassName();
  
  //인스턴스 멤버 사용
  obj.field1 = 10;
  obj.method1();
}

 

main() 메소드도 동일한 규칙이 적용된다

main() 메소드도 정적 메소드이므로 객체 생성 없이 인스턴스 필드와 인스턴스 메소드를 main()에서 바로 사용할 수 없고

객체를 생성한 다음 참조 변수로 접근해야 한다