繁体   English   中英

Java中的静态嵌套类

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM