/ / не-статичен клас не може да бъде посочен от статичен контекст [дубликат] - java, internal-classes

нестатичният клас не може да бъде отнесен от статичен контекст [дубликат] - Java, вътрешни класове

Възможно дублиране:
Защо получавам "не-статична променлива, която не може да бъде посочена от статичен контекст"?

Ето кодовете

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

грешката казва:

нестатичен клас възел не може да се посочва от статичен контекст

Защо не трябва да се позовавам на класа Node в моя main () метод?

Отговори:

47 за отговор № 1

Нестатичната вложена класа в Java съдържа скрито позоваване на инстанция на родителския клас. Така да инстанцира a Node, трябва да имате и пример за Stack, В статичен контекст (основният метод) няма инстанция Stack за справка. Така компилаторът показва, че не може да конструира a Node.

Ако го направите Node статичен клас (или редовен външен клас), тогава няма да се нуждае от позоваване Stack и могат да бъдат инстанцирани директно в статичния основен метод.

Вижте Спецификация на езика на Java, глава 8 за подробности, като например Пример 8.1.3-2.


10 за отговор № 2

Нестатистическите вложени класове (вътрешни класове) иматдостъп до други членове на обхващащия клас, дори ако те са обявени за частни. Статичните вложени класове нямат достъп до други членове на обграждащия клас. Като член на OuterClass, вложената класа може да бъде обявена за частна, публична, защитена или пакетна частна.

За да инстанцирате вътрешен клас, трябва първо да създадете екземпляр от външния клас. След това създайте вътрешния обект във външния обект с този синтаксис: 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();
}
}

2 за отговор № 3

Направи твое (Node) клас static

private static class Node {

2 за отговор № 4

Или можете да обявите класа Node извън на public class Stack

Така,

    public class Stack
{

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

}

1 за отговор № 5

Java има два типа класове вложени членове: статично и нестатично (също вътрешно). Най- Node class е нестатична вложена класа. За да създадете копие на a Node трябва да имате копие на a Stack:

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

0 за отговор № 6

Ако използвате Eclipse IDE, ще видите обяснението, когато задържите мишката върху грешката. Трябва да каже нещо подобно:

Не е достъпен приложен екземпляр от тип Stack. Трябва да квалифицирате разпределението с приложен екземпляр от тип Stack (напр. X.new A () където x е инстанция на Stack).

Тук е работен код

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