java - 局部内部类的顺序

标签 java

为什么局部内部类取决于定义的顺序。例如,首先定义的局部内部类不能为第一个局部内部类之后定义的类创建对象。

`package inner;

public class OuterClass {
    class Inner1{
        Inner2 ic=new Inner2(); // No compilation error 

    }
    class Inner2 {
        Inner1 in=new Inner1();
    }

    public static void main(String[] args) {
        class A2{
            A1 a=new A1(); // Compilation error
        }
        class A1{
            int a1;
            A2 a=new A2();
        }
    }
}
`

最佳答案

这是因为 A2 和 A1 是局部类,并且根据 The Java Language Specification ,第 6.3 节声明的范围:

The scope of a local class declaration immediately enclosed by a block (§14.2) is the rest of the immediately enclosing block, including its own class declaration.

由于范围是紧邻 block 的其余部分,因此您不能在其声明之前使用本地类。

内部类与其封闭类的一个实例相关联,并且可以访问封闭类的其他成员。

内部类是其封闭类的成员,作为内部类实例的对象存在于外部类的实例中。

可以看看Nested Classes tutorial

关于java - 局部内部类的顺序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28861613/

相关文章:

java - 如何在线程中显示消息框?

java - 读取并显示传入的消息文本android

java - junit cucumber 缺少步骤错误

java - Apache Axis 响应无类型

java - 有没有人使用过 GWT 并且可以说它确实兑现了它的 promise ?

java - 即时在 TreeSet 中搜索记录

Java字符串用多个字符分隔符分割

java - 解析包含嵌套标签的 xml

java - 为什么我的同步方法不起作用?

java - Java 8 Stream 中有多个正则表达式从 Line 读取文本