2012-04-16 30 views
6

Tôi đang duyệt qua nguồn Android, chỉ cần đọc nó, và tôi đã gặp một đoạn mã lạ ở số Android.Util.JsonReader. Nó như sau:Phạm vi Java đặc biệt

private final List<JsonScope> stack = new ArrayList<JsonScope>(); 
{ 
    push(JsonScope.EMPTY_DOCUMENT); 
} 

Điều này làm chính xác điều gì? Tức là, phạm vi ngay sau nhiệm vụ new? Nếu tôi hiểu chính xác, bất cứ khi nào lớp này, JsonReader được khởi tạo, (không phải tĩnh, phải không?), stack sẽ được khởi tạo tại đây, thay vì thông qua một this.stack = ... trong hàm tạo, đúng không?

Phạm vi đó sẽ làm gì? Việc đó có được thực thi sau stack được khởi tạo không? Tôi chỉ là một chút bối rối ở đây, như tên của mô hình này, và việc sử dụng nó.

Trả lời

5

Nó không liên quan đến Tuyên bố mới. Nó là một bộ khởi tạo, giống như một hàm tạo không có tham số không tên.

http://docs.oracle.com/javase/specs/jls/se7/html/jls-8.html#jls-8.6

Chúng được thực hiện trước khi các nhà thầu của một lớp trong trật tự văn bản

http://docs.oracle.com/javase/specs/jls/se7/html/jls-12.html#jls-12.5

+0

gì sau đó gây nên không? Chúng có thể là nhiều cái khác nhau, có lẽ là sau các trường lớp khác nhau? – Josh

+0

Cảm ơn, đó là một số liên kết tuyệt vời. Một câu hỏi mặc dù, tại sao nó xuất hiện ngay lập tức sau lĩnh vực cụ thể đó? Nó chỉ dành riêng cho lớp học này? Có ~ 6 trường theo sau 'stack', trước hàm tạo lớp và khoảng cùng số tiền trước đó. – Josh

+2

Tôi cho rằng nó chỉ ở đó vì nó thao tác trường chồng thông qua cuộc gọi push. –

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