java - usar - clase no estática no puede ser referenciada desde un contexto estático
public static java (6)
Haz tu clase ( Node
) static
private static class Node {
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 ()?
Java tiene dos tipos de clases de miembros anidados : 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();
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 sintaxis: 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();
}
}
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{
}
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();
}
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 compilador 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.