2012-03-25 48 views
5

Tôi biết, đó là một chủ đề rất cơ bản, vì vậy nếu đó là câu hỏi trùng lặp, vui lòng cung cấp tham chiếu.Thứ tự khởi tạo trong Java

Say, có một đoạn mã sau:

public class Point { 

    int x = 42; 
    int y = getX(); 

    int getX() { 
     return x; 
    } 

    public static void main (String s[]) { 
     Point p = new Point(); 
     System.out.println(p.x + "," + p.y); 
    } 
} 

Nó ra: 42,42

Nhưng nếu chúng ta thay đổi thứ tự của sự xuất hiện của các biến:

public class Point { 

    int y = getX(); 
    int x = 42; 

    int getX() { 
     return x; 
    } 

    public static void main (String s[]) { 
     Point p = new Point(); 
     System.out.println(p.x + "," + p.y); 
    } 
} 

Nó ra: 42,0

Tôi hiểu rằng tôi n trường hợp thứ hai tình huống có thể được mô tả như một cái gì đó như: "Được rồi, tôi không biết giá trị x trả về là gì, nhưng có một số giá trị". Những gì tôi không hoàn toàn hiểu là làm thế nào x có thể được nhìn thấy ở đây mà không được nhìn thấy cùng với giá trị của nó. Nó là một câu hỏi về thời gian biên dịch và thời gian chạy? Cảm ơn trước.

+1

Kiểm tra [JLS] (http://docs.oracle.com/javase/specs/ jls/se7/html/jls-4.html # jls-4.12.5) – assylias

Trả lời

7

Khi bạn tạo một int trong Java, nó sẽ tự động được khởi tạo thành 0. Vì vậy, mã thứ hai thực hiện là tạo hai ints xy đặt cả hai thành 0 rồi đặt y thành giá trị x0 rồi đặt x thành giá trị 42.

+0

Cảm ơn, bây giờ nó có ý nghĩa. –

+0

@JohnDoe Không sao cả. – twain249

2

int có 0 làm giá trị mặc định.

1

Vì vậy, tại thời gian biên dịch, trình biên dịch được tạo ra hướng dẫn để dành không gian (bộ nhớ) cho x và y và để thiết lập giá trị của họ để 0

Khi chạy, JVM populates đối tượng Point (gán nó nhớ) và gán bộ nhớ và giá trị 0 ban đầu cho x và y.

Sau đó, mã thời gian chạy khởi bắt đầu thực hiện và bộ y 0 và sau đó x 42 (trong trường hợp thứ hai)

Các vấn đề liên quan