No enclosing instance of type

static 함수에서 참조하려는 클래스가 닫혀 있어 접근하지 못한다는 오류!

보통 내부에 있는 클래스를 static 함수가 참조할 때 에러가 난다.

static 변수가 붙은 변수나 클래스는 클래스가 메모리에 올라갈 때 자동으로 생성된다. 아래와 같은 경우 Myani가 생성되기 전에 Anidog 클래스를 사용하기 때문이다. 상위 클래스에 포함된 하위 클래스는 미리 생성하고 나서 사용할 수 있다.

Anidog 클래스 객체 생성해서 사용하고 싶은데 main은 생성이 됐는데 Anidog는 아직 생성이 아나 되서 사용할 수 없는 경우.

Main 내부 클래스를 static으로 하지 않았을 때 에러가 나는 이유 main함수에서 클래스를 만들때, Main은 메모리에 올라가서 실행(?)을 하는데 static이 붙은 변수나 클래스는 클래스가 메모리에 올라갈 때 자동으로 생성된다.

public class Myani{
    class Anidog{
        String kind;
        int age;
        String name;
        Anidog(){}
        public void print(){}
    }
    
    public static void main(String[] args){
        Anidog ad = new Anidog();
        ad.kind = "강아지";
        ad.age = 1;
        ad.name = "소리";
        ad.print();
    }
}

Last updated