tôi có 2 lớp:Trình khởi chạy tĩnh chạy sau hàm tạo, tại sao?
Class A:
public class A {
static B b = new B();
static {
System.out.println("A static block");
}
public A() {
System.out.println("A constructor");
}
}
Class B:
public class B {
static {
System.out.println("B static block");
new A();
}
public B() {
System.out.println("B constructor");
}
}
tôi tạo ra một lớp chính mà chỉ tạo ra một mới:
public class Main {
public static void main(String[] args) {
new A();
}
}
Các sản lượng tôi nhận được là:
B static block
A constructor
B constructor
A static block
A constructor
Như bạn có thể thấy, hàm tạo của A được gọi trước bộ khởi tạo tĩnh của nó.
Tôi hiểu rằng nó có liên quan đến sự phụ thuộc chu kỳ mà tôi đã tạo nhưng tôi đã có ấn tượng rằng bộ khởi tạo tĩnh luôn luôn chạy trước hàm tạo.
Lý do cho điều này xảy ra (về mặt kỹ thuật trong triển khai java) là gì?
Bạn có nên tránh các trình khởi tạo tĩnh cùng nhau không?
Ai downvoted xin vui lòng để lại một bình luận –
câu hỏi tốt thực sự +1 .. :) – PermGenError
@AviramSegal một số người là thói quen downvote .. họ không bao giờ đọc toàn bộ câu hỏi, bằng cách đọc nhóm, họ downvote câu hỏi. – Ravi