2012-05-09 74 views
8

Tôi đọc trong một số bài viết có một cái gì đó gọi là Khởi tạo các khối trong java; nơi chúng ta có thể thực hiện một số nhiệm vụ khởi tạo Khi lớp được nạp hoặc một cá thể được tạo ra.Có cấu trúc nào giống như các khối khởi tạo Java trong C++ không?

Ngoài các phương thức và phương thức khởi tạo, Khối khởi tạo là vị trí thứ ba trong Chương trình Java có thể thực hiện các thao tác.

class InitDemo 
{ 
    static int y; 
    int x; 
{ 
    y = 10; 
    x = 0; 
} 
} 

Tôi yêu cầu nếu có paradigme như trong C++? Cảm ơn bạn.

+0

C không có khái niệm về các lớp đang được "tải", và quan điểm của nó về thống kê hoàn toàn khác với Java. Vì vậy, ngoài các bộ khởi tạo tĩnh, không có gì tương tự. –

+1

(Về bản chất, khối 'tĩnh' trong Java là hàm tạo của lớp, vì các lớp là (bán) các đối tượng chính thức. Các lớp C++ không phải là các đối tượng.) –

+0

Cảm ơn bạn đã cung cấp thông tin, hữu ích. –

Trả lời

4

Cần phải chỉ ra rằng có hai dạng khối khởi tạo khác nhau trong Java. Các khối {...} trần, không có từ khóa static, chỉ là một chút của trình biên dịch swizzling - văn bản trong khối được nối vào phía trước của bất kỳ nhà thầu được xác định - không có phân đoạn mã riêng biệt được tạo ra. Một khối bắt đầu static {..., mặt khác, là một khối khởi tạo tĩnh và một (bán) thủ tục thích hợp theo đúng nghĩa của nó (được đặt tên, không đáng ngạc nhiên, "tĩnh").

Khối static chỉ được thực hiện một lần, ngay lập tức (với một vài cảnh báo) sau khi lớp được tải. Trình khởi tạo không tĩnh (nhờ vào việc được sao chép vào các hàm tạo) được thực hiện mỗi khi một hàm tạo được thực thi, và do đó thường không thích hợp cho init tĩnh.

2

Tóm lại, C++ không có tương đương trực tiếp cho cấu trúc Java này.

Để có được hành vi tương tự, bạn sẽ phải đặt xy từ các nhà thầu của InitDemo (bạn cũng có thể làm trong Java).

+0

Có thực sự aix, tôi thấy rằng trái ngược với java các nhà xây dựng vẫn là chỉ * nơi fo initilizing gán cho C + +. –

+0

@ Blood-HaZaRd: Khá nhiều. Trong Java, khối khởi tạo (non-'static') chỉ là một cách để đặt một số mã phổ biến vào mọi hàm tạo. – NPE

+0

Có và bên cạnh đó có hai hương vị tĩnh intilizing khối và không tĩnh mà tôi nghĩ là hữu ích. –

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