clase no estática no puede ser referenciada desde un contexto estático

Posible duplicado:
¿Por qué obtengo una “variable no estática a la que no se puede hacer referencia desde un contexto estático”?

Aquí están los códigos

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

el error dice:

Nodo de clase no estático no se puede hacer referencia desde un contexto estático

¿Por qué no debería referir la clase Node en mi método main ()?

Una clase anidada no estática en Java contiene una referencia implícita a una instancia de la clase padre. Por lo tanto, para crear una instancia de un Node , necesitaría también tener una instancia de Stack . En un contexto estático (el método principal), no hay ninguna instancia de Stack a la que referirse. Por lo tanto, el comstackdor indica que no puede construir un Node .

Si convierte a Node una clase estática (o clase externa regular), no necesitará una referencia a Stack y se podrá crear una instancia directamente en el método principal estático.

Consulte la Especificación del lenguaje Java, Capítulo 8 para más detalles, como el Ejemplo 8.1.3-2.

Las clases anidadas no estáticas (clases internas) tienen acceso a otros miembros de la clase adjunta, incluso si se declaran privadas. Las clases anidadas estáticas no tienen acceso a otros miembros de la clase adjunta. Como miembro de OuterClass, una clase anidada se puede declarar privada, pública, protegida o paquete privado.

Para crear una instancia de una clase interna, primero debe crear una instancia de la clase externa. A continuación, cree el objeto interno dentro del objeto externo con esta syntax: OuterClass.InnerClass innerObject = outerObject.new InnerClass();

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

o

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

Haz tu clase ( Node ) static

 private static class Node { 

O puede declarar el Nodo de clase fuera de public class Stack

Al igual que,

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

Java tiene dos tipos de clases de miembros nesteds : estático y no estático (también conocido como interno). La clase Node es una clase anidada no estática. Para crear una instancia de un Node debes tener una instancia de una Stack :

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

Si usa Eclipse IDE, verá la explicación cuando pase el mouse por encima del error. Debería decir algo como esto:

No se puede acceder a ninguna instancia adjunta de tipo Stack. Debe calificar la asignación con una instancia adjunta de tipo Stack (por ejemplo, xnew A () donde x es una instancia de Stack).

Aquí está el código de trabajo

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