与内在阶层的意识混淆

时间:2016-05-04 15:32:21

标签: java inner-classes

假设我有一个类 A 和内部类 A.B ,我在单独的类的方法中创建了一个类A.B的实例。

$extension = strrchr($_FILES['uploadFile']['name'], '.');
    if (!in_array($extension, $extensions)) {
        $err[]='Wrong file format only .png , .gif, .jpg, .jpeg are accepted';
    }
...
...

这个例子是什么?它是obj1的一部分还是独立的对象?

据我所知,某些实例是独立实体,例如1个苹果,1个人等。是否有可能与内部阶级的对象进行类比?

1 个答案:

答案 0 :(得分:2)

B objectOfB1 = objectOfA1.new B();

B objectOfB2 = objectOfA2.new B();

暗示objectOfB1与objectOfA相关联。 objectOfB1具有objectOfA1引用的对象的隐式引用。类似地,objectOfB2与objectOfA2相关联。

现在即使objectOfA1 = null;然后,它所引用的A的对象也不符合垃圾收集的条件,因为它具有来自B类对象内部的硬引用。 objectOfB1。

objectOfB1知道objectOfA1但反之亦然。您可以将其视为我们将objectOfA1作为构造函数参数传递以创建objectOfB1。对于objectOfB2也是如此,它拥有对objectOfA2的隐式引用。

class OuterClass{
    InnerClass dataMem1;
    InnerClass dataMem2;

    class InnerClass{
        int k;
    }

}

这里没有OuterClass的对象就不能存在InnerClass的Object,所以在编译时,编译器会在It中注入outerClass的引用。

不完全如下所示,但您可以参考以下代码以了解您的理解,因为在编写上述代码时会发生非常类似的事情。

class OuterClass{
    InnerClass dataMem1;
    InnerClass dataMem2;
}


class InnerClass{
    OuterClass objInjectedByCompiler;
    int k;
    // constructor
    InnerClass(OuterClass objectOfOuter){
        this.objInjectedByCompiler = objectOfOuter;
    }
}

要创建InnerClass的对象,您需要一个Object of OuterClass。

现在问题应该是InnerClass对象实际上如何获得OuterClass的对象。当我们执行objOfOuter.new InnerClass()时,与this相关联的objOfOuter将作为类OuterClass的所需对象。

PS:以上适用于非静态嵌套类,而不适用于静态的内部嵌套类。