Tôi đã đọc qua rất nhiều câu hỏi về tân binh Java finalize()
và thấy nó thật hoang mang khi không ai thực sự nói rõ rằng việc hoàn thiện () là một cách không đáng tin cậy để làm sạch tài nguyên. Tôi thấy ai đó nhận xét rằng họ sử dụng nó để dọn sạch các Kết nối, điều này thực sự đáng sợ vì cách duy nhất để đến gần với sự đảm bảo rằng Kết nối được đóng là thực hiện thử (bắt) cuối cùng.
Tôi không được học CS, nhưng tôi đã lập trình Java một cách chuyên nghiệp gần một thập kỷ nay và tôi chưa bao giờ thấy ai thực hiện finalize()
trong một hệ thống sản xuất bao giờ. Điều này vẫn không có nghĩa là nó không có công dụng của nó, hoặc những người tôi đã làm việc cùng đã làm đúng.
Vì vậy, câu hỏi của tôi là, những trường hợp sử dụng nào có để thực hiện finalize()
mà không thể xử lý đáng tin cậy hơn thông qua một quy trình hoặc cú pháp khác trong ngôn ngữ?
Vui lòng cung cấp các kịch bản cụ thể hoặc trải nghiệm của bạn, chỉ cần lặp lại một cuốn sách văn bản Java hoặc hoàn thành mục đích sử dụng là không đủ, vì đó không phải là mục đích của câu hỏi này.
finalize()
. Tuy nhiên, mã thư viện nền tảng , chẳng hạn như SocketInputStream
quản lý tài nguyên bản địa thay cho người gọi, để cố gắng giảm thiểu rủi ro rò rỉ tài nguyên (hoặc sử dụng các cơ chế tương đương, như PhantomReference
được thêm vào sau). Vì vậy, hệ sinh thái cần chúng , mặc dù 99.9999% các nhà phát triển sẽ không bao giờ viết một.