關於內部類的初始化趣事
阿新 • • 發佈:2020-11-01
關於內部類初始化
今天在寫程式碼時,碰到再內部類初始化過程中呼叫外部類變數的情況,程式碼如下:
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的地址,所以以後出現這種迴圈賦值的時候要特別注意。