Java 静态嵌套类与非静态错误?

Java 静态嵌套类与非静态错误?,java,class,static,nested,Java,Class,Static,Nested,我使用了下面的一段代码,它在指定的点上给了我一个错误: class LinkedList{ class pair{ Integer petrol; Integer distance; public pair (Integer a, Integer b){ petrol = a; distance = b; }

我使用了下面的一段代码,它在指定的点上给了我一个错误:

class LinkedList{
    class pair{
            Integer petrol;
            Integer distance;

            public pair (Integer a, Integer b){
                    petrol = a;
                    distance = b;
            }
    }

    public static void main(String args[]){
            pair[] circle = {new pair(4,6), new pair(6,5), new pair(7,3), new pair(4,5)}; // error at first element of array circle!!!!!!!
    }
}
然后我纠正了它,错误消失了

class LinkedList{
    static class pair{ // changed to static!!!
        Integer petrol;
        Integer distance;

        public pair (Integer a, Integer b){
            petrol = a;
            distance = b;
        }
    }

    public static void main(String args[]){
        pair[] circle = {new pair(4,6), new pair(6,5), new pair(7,3), new pair(4,5)}; //error gone!
    }
}
我的问题是,为什么错误一开始就出现了

错误:无法访问LinkedList类型的封闭实例。必须 使用LinkedList类型的封闭实例限定分配


在案例1中,
pair
LinkedList
的成员。这意味着您只能通过LinkedList访问pair,而不是像该类的任何变量或方法那样直接访问pair

是其封闭类的成员。非静态嵌套类(内部类)可以访问封闭类的其他成员,即使它们被声明为私有。静态嵌套类无权访问封闭类的其他成员

要实例化内部类,必须首先实例化外部类。然后,使用以下语法在外部对象中创建内部对象:

OuterClass.InnerClass innerObject = outerObject.new InnerClass();
然而,在案例2中,pair就像任何其他顶级类一样,只是分组以维护关系。它根本不是外阶级的成员。您可以直接访问它

注意:与任何其他顶级类一样,A与其外部类(和其他类)的实例成员进行交互。实际上,静态嵌套类在行为上是一个顶级类,为了便于打包而嵌套在另一个顶级类中


如果没有static关键字,
pair
将成为
LinkedList
的内部类,这意味着每个
pair
对象必须与封闭的
LinkedList
类的实例相关联。