public class LinkedList {
Node head; // head of list
// Linked list Node.
// This inner class is made static
// so that main() can access it
static class Node {
int data;
Node next;
// Constructor
Node(int d)
{
data = d;
next = null;
}
}
}
我读过关于静态内部类的文章,它就像普通的类。
在这里,我甚至在声明静态内部类之前都不理解节点头是如何被调用的?
静态内部类是否首先编译,因为外层类知道内部类,甚至在声明它之前?
发布于 2019-02-18 22:18:30
正如在Java编译中提到的
在Java中,如果您使用了对任何其他java对象的引用,那么如果还没有编译该类,那么该对象的类将被自动编译。这些自动编译是嵌套的,这种情况一直持续到运行程序所需的所有类被编译为止。因此,通常只编译高级类就足够了,因为所有依赖类都将自动编译。
所以,一般来说你是对的。
那么使用嵌套类的原因呢?嵌套类甲骨文教程说:
使用嵌套类的令人信服的原因包括: 这是一种在逻辑上对只在一个地方使用的类进行分组的方法:如果一个类只对另一个类有用,那么将其嵌入该类并将两者保持在一起是合乎逻辑的。嵌套这样的“助手类”使它们的包更加精简。 它增加了封装:考虑两个顶级类A和B,其中B需要访问A的成员,否则将被声明为私有。通过将B类隐藏在A类中,A的成员可以声明为私有成员,B可以访问它们。此外,B本身也可以向外界隐藏。 它可以导致更易读和更可维护的代码:在顶级类中嵌套小类使代码更接近使用的位置。
对于所有嵌套类,包括静态类,这都是正确的。
发布于 2019-02-18 22:03:50
类的静态组件总是在类的实例组件之前编译。编译从上到下按您的想法进行,但对不同类型的组件(静态块、常量、实例变量、构造函数、.)进行多次编译。
这个答案给出了另一个很好的例子:解释java编译顺序
发布于 2019-02-18 22:14:30
您正在声明Node类型的变量(而不是调用变量),然后编译器查找Node类型。当您将Node定义为静态内部类(或内部类)时,编译器就知道了节点的真正含义。java类中成员的顺序与此无关。
https://stackoverflow.com/questions/54759567
复制相似问题