如何在外部 class 中声明一个实例变量(类型为内部 class)?
How can I declare an instance variable(of type inner class) in the outer class?
我想在定义内部 class 之前在外部 class 声明一个实例,但在代码中引发了问题:
class LinkedList
{
Node head; //line3
class Node //line5
{
int data;
Node next;
Node(int d)
{
data = d;
next = null;
}
}
public void push(int new_data)
{
Node new_node = new Node(new_data); //line 20
new_node.next = head;
head = new_node;
}
- 在第 3 行中,我很困惑为什么在第 5 行中定义节点 class 之前,您能够创建 Node 类型的实例变量。
- 此外,假设我想在 Linkedlist 类型的节点 class 中创建一个实例变量,它会让我这样做吗?
- 第20行的push方法中,在创建新的Node实例时,是否也创建了新的LinkedList实例,因为Node是LinkedList的内部class?
class LikendList 在编译时首先编译它检查节点 class 可以在此 class 外部或内部然后节点 class 是之后编译 LikendList 将被编译。如果你在节点内给出一个 LikendList 它会做同样的事情并编译但是在 运行 时间你可能会遇到循环引用错误
您可以这样做,因为 Java 编译器 聪明 ,并且可以向前看。
这也是为什么你可以在单独的源文件中有两个 类 A
和 B
,其中 A
指的是 B
,而 B
指的是A
,也就是一个circular dependency,编译就ok了,只要你同时编译。
您甚至不必在编译时同时命名 类。当编译器正在编译 A
并看到对 B
的引用时,它会自动查找 B
的源代码并在同一个编译作业中对其进行编译。这样,编译器可以在解析成员声明之前提前知道存在哪些类型。
我想在定义内部 class 之前在外部 class 声明一个实例,但在代码中引发了问题:
class LinkedList
{
Node head; //line3
class Node //line5
{
int data;
Node next;
Node(int d)
{
data = d;
next = null;
}
}
public void push(int new_data)
{
Node new_node = new Node(new_data); //line 20
new_node.next = head;
head = new_node;
}
- 在第 3 行中,我很困惑为什么在第 5 行中定义节点 class 之前,您能够创建 Node 类型的实例变量。
- 此外,假设我想在 Linkedlist 类型的节点 class 中创建一个实例变量,它会让我这样做吗?
- 第20行的push方法中,在创建新的Node实例时,是否也创建了新的LinkedList实例,因为Node是LinkedList的内部class?
class LikendList 在编译时首先编译它检查节点 class 可以在此 class 外部或内部然后节点 class 是之后编译 LikendList 将被编译。如果你在节点内给出一个 LikendList 它会做同样的事情并编译但是在 运行 时间你可能会遇到循环引用错误
您可以这样做,因为 Java 编译器 聪明 ,并且可以向前看。
这也是为什么你可以在单独的源文件中有两个 类 A
和 B
,其中 A
指的是 B
,而 B
指的是A
,也就是一个circular dependency,编译就ok了,只要你同时编译。
您甚至不必在编译时同时命名 类。当编译器正在编译 A
并看到对 B
的引用时,它会自动查找 B
的源代码并在同一个编译作业中对其进行编译。这样,编译器可以在解析成员声明之前提前知道存在哪些类型。