[英]Static nested Class in java
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;
}
}
}
我读到关于静态内部类的知识,就像普通类一样。
在此我什至不知道在声明静态内部类之前如何调用Node Head ?
静态内部类是否由于该外部类而首先在其声明之前就知道该内部类,因此是否已对其进行编译?
类的静态组件始终在类的实例组件之前进行编译。 根据您的想法,编译过程从上到下进行,但是对于不同种类的组件(静态块,常量,实例变量,构造函数等),编译将多次进行。
这个答案给出了另一个很好的例子: 解释Java编译顺序
您正在声明类型为Node的变量(未调用),然后编译器查找类型为Node的变量。 当您将Node定义为静态内部类(或内部类)时,编译器就会知道真正的节点是什么。 java类中成员的顺序无关紧要。
并且如Java编译中所述 :
在Java中,如果您使用了对任何其他Java对象的引用,则该对象的类将被自动编译(如果尚未编译)。 这些自动编译是嵌套的,并且一直持续到编译了运行程序所需的所有类为止。 因此通常只编译高级类就足够了,因为所有依赖类都将被自动编译。
所以,总的来说你是对的。
使用嵌套类的原因又如何呢? 嵌套类 Oracle教程说:
使用嵌套类的令人信服的原因包括:
这是一种将只在一个地方使用的类进行逻辑分组的方法:如果一个类仅对另一个类有用,那么将其嵌入该类并将两者保持在一起是合乎逻辑的。 嵌套此类“帮助程序类”可使它们的程序包更加简化。
它增加了封装:考虑两个顶级类A和B,其中B需要访问A的成员,否则它们将被声明为私有。 通过将类B隐藏在类A中,可以将A的成员声明为私有,而B可以访问它们。 另外,B本身可以对外界隐藏。
这可能会导致代码更具可读性和可维护性:将小类嵌套在顶级类中会使代码更靠近使用位置。
对于所有嵌套类(包括静态类)都是如此。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.