1. 程式人生 > 實用技巧 >關於內部類的初始化趣事

關於內部類的初始化趣事

關於內部類初始化

今天在寫程式碼時,碰到再內部類初始化過程中呼叫外部類變數的情況,程式碼如下:

class TestNode{
    class Node{
        Node next;
        Node(){
            next = nil;
        }
    }
    Node nil, head;

    public TestNode() {
        nil = new Node();
        head = new Node();
    }

    public void printInfo() {
        System.out.println("nil is : " + nil);
        System.out.println("nil.next is : " + nil.next);
        System.out.println("head is : " + head);
        System.out.println("head.next is : " + head.next);
    }
}

在這段程式碼中,內部類Node在建構函式中呼叫了外部類TestNode的Node變數nil,預先是想nil的next值會被賦值為nil本身,但是執行printInfo()時得到了下面的結果:

public class TestMain {
    public static void main(String[] args) {
        TestNode testNode = new TestNode();
        testNode.printInfo();
    }

}
nil is : TestNode$Node@232204a1
nil.next is : null
head is : TestNode$Node@4aa298b7
head.next is : TestNode$Node@232204a1

可以看到,nil是在建構函式呼叫之後才得到新Node的地址,所以以後出現這種迴圈賦值的時候要特別注意。