Как статический класс Object создается без ссылки? - PullRequest
0 голосов
/ 19 февраля 2019

Я пытался решить проблемы LinkedList через Java, но я обнаружил концепцию статического внутреннего класса, и я застрял здесь!

Мой код работает, но не мог понять, как объект статического классаСоздается

public class findNthNodeInLL {
    static class Node {
       int data;
       Node next;

       Node(int data) {
          this.data = data;
          next = null;
       }
    }

int findNthNode(Node head, int count) {
    int pos = 0;
    Node ptr = head;

    while(ptr != null && pos != count) {
        pos++;
        ptr = ptr.next;
    }

    return ptr.data;
}

public static void main(String[] args) {
    findNthNodeInLL ll = new findNthNodeInLL();
    Node head = new Node(1);
    head.next = new Node(2);
    head.next.next = new Node(3);
    head.next.next.next = new Node(4);
    head.next.next.next.next = new Node(5);

    System.out.println(ll.findNthNode(head,3));
}
}

Внутренний класс Object, т.е. head создается без какой-либо ссылки на внешний класс.Даже конструктор вызывается, и память создается без какой-либо ссылки на внешний класс.

Каков здесь настоящий сценарий?Что происходит?Почему мы не используем какую-либо внешнюю ссылку на класс для внутреннего конструктора или объекта?

Может быть, я что-то упустил.Пожалуйста, помогите мне понять сценарий здесь.

1 Ответ

0 голосов
/ 19 февраля 2019

Вы используете статический класс внутри самого внешнего класса, чтобы не указывать имя окружающего класса.Статический вложенный класс поведенчески похож на любой над статическими полями.

Но если вы хотите создать экземпляр статического вложенного класса вне внешнего класса, вы должны поместить имя окружающего класса или использовать ссылку на внешний класс на егоопределение.

Например:

public class Main {
static class NodeInside {
    int data;
    NodeX.Node next;

    NodeInside(int data) {
        this.data = data;
        next = null;
    }
}
public static void main(String[] args) {
    NodeX ll = new NodeX();
    NodeX.Node head = new NodeX.Node(1); // need to put the enclosing class name
    NodeInside nodeInside = new NodeInside(1); // no need to put the enclosing class 
  }
}

class NodeX{
static class Node {
    int data;
    Node next;

    Node(int data) {
        this.data = data;
        next = null;
    }
}
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...