java definition - 비 정적 클래스는 정적 컨텍스트에서 참조 할 수 없습니다.




not or (6)

Java에는 두 가지 유형의 중첩 된 멤버 클래스가 있습니다 . 정적 및 비 정적 (내부라고도 함)입니다. Node 클래스는 비 정적 중첩 클래스입니다. Node 의 인스턴스를 생성하려면 Stack 의 인스턴스가 있어야합니다.

Stack s = new Stack();
Node n = s.new Node();

가능한 중복 :
"정적 컨텍스트에서 참조 할 수없는 비 정적 변수"를 얻는 이유는 무엇입니까?

여기에 코드가있다.

public class Stack
{
    private class Node{
        ...
    }
    ...
    public static void main(String[] args){
         Node node = new Node(); // generates a compiling error
    }
}  

오류 메시지 :

비 정적 클래스 노드 는 정적 컨텍스트에서 참조 할 수 없습니다.

왜 내 main () 메소드에서 Node 클래스를 참조하지 말아야 하는가?


귀하의 ( Node ) 클래스를 static 만드십시오.

private static class Node {

비 정적 중첩 클래스 (내부 클래스)는 private 클래스로 선언 된 경우에도 해당 클래스의 다른 멤버에 액세스 할 수 있습니다. 정적 중첩 클래스는 해당 클래스의 다른 멤버에 액세스 할 수 없습니다. OuterClass의 멤버로서, 중첩 된 클래스는 private, public, protected 또는 private 패키지로 선언 될 수 있습니다.

내부 클래스를 인스턴스화하려면 먼저 외부 클래스를 인스턴스화해야합니다. 그런 다음이 구문을 사용하여 외부 객체 내에 내부 객체를 만듭니다. OuterClass.InnerClass innerObject = outerObject.new InnerClass();

public static void main(String[] args){
         Stack stack = new Stack();
         Node node = stack.new Node(); 
    }

또는

public class Stack
{
    private class Node{
        ...
    }
    ...
    ...
    ...  

    public static void main(String[] args){
             Node node = new Stack().new Node(); 
    }
}  

Java의 비 정적 중첩 클래스에는 상위 클래스의 인스턴스 에 대한 암시 적 참조가 포함됩니다. 따라서 Node 를 인스턴스화하려면 Stack 인스턴스도 필요합니다. 정적 컨텍스트 (기본 메서드)에는 참조 할 Stack 인스턴스가 없습니다. 따라서 컴파일러는 Node 생성 할 수 없음을 나타냅니다.

Node 를 정적 클래스 (또는 정규 외부 클래스)로 만들면 Stack 대한 참조가 필요하지 않으며 정적 기본 메서드에서 직접 인스턴스화 할 수 있습니다.

Example 8.1.3-2와 같은 자세한 내용은 Java 언어 사양, 8 장 을 참조하십시오.


또는 클래스 클래스를 public class Stack 외부 에 선언 할 수 있습니다.

마찬가지로,

    public class Stack
    {

        public static void main(String[] args){
             Node node = new Node();         
}        
    }  
    class Node{

    }

번호의 끝에 L 을 추가하십시오.

long bytes = 4294967296L;




java inner-classes