class abc {
int a = 0;
static int b;
static abc h = new abc(); //line 4
public abc() {
System.out.println("cons");
}
{
System.out.println("ini");
}
static {
System.out.println("stat");
}
}
public class ques {
public static void main(String[] args) {
System.out.println(new abc().a);
}
}
Khi tôi viết mã này tôi nhận được đầu ra trong trật tự như thế này:Tạo đối tượng sử dụng từ khóa tĩnh trong Java
ini
cons
stat
ini
cons
0
đây khi tôi tạo ra một đối tượng mới trong main(), class abc
đã nạp và static
biến và khối được thực hiện theo thứ tự chúng được viết. Khi điều khiển đến dòng 4 static abc h = new abc();
Chặn khởi tạo thể hiện được gọi. Tại sao? tại sao khối tĩnh không được gọi khi một đối tượng mới được tạo ra ở dòng 4 và cho đến khi khối tĩnh đó cũng không được gọi ngay cả một lần, do đó, theo quy ước, khối tĩnh nên được gọi. Tại sao đầu ra không mong đợi này đến?
bản sao có thể có của [Khởi tạo lớp tĩnh Java] (http://stackoverflow.com/questions/3499214/java-static-class-initialization) – DavidPostill
Mã tĩnh chỉ chạy một lần để khi đối tượng thứ hai được tạo (bên trong đầu tiên) nó không được thực hiện. Tôi ngạc nhiên rằng 'ini' được thực hiện vào thời điểm này. – Eypros
@ DavidPostill- Tagged post xóa khái niệm rằng cách khởi tạo tĩnh thường xảy ra. Nhưng nguyên nhân chính của tôi là tại sao khối tĩnh không được gọi ở dòng 4 và thay vào đó khối khởi tạo Instance được gọi. –