Có bất kỳ chi tiết nào về việc có hay không một đối tượng được làm sạch bằng cách sử dụng finalize()
nếu hàm tạo của đối tượng đów là một ngoại lệ.Có thể hoàn thành được gọi sau khi một nhà xây dựng ném một ngoại lệ?
Khi phương pháp này được gọi là bệnh nghiêm trọng được xác định. Theo hướng dẫn sử dụng:
Ngôn ngữ lập trình Java không đảm bảo chủ đề nào sẽ gọi phương thức hoàn thiện cho bất kỳ đối tượng cụ thể nào. Tuy nhiên, nó được đảm bảo, tuy nhiên, , rằng chuỗi gọi kết thúc sẽ không giữ bất kỳ khóa đồng bộ hóa nào có thể nhìn thấy người dùng khi hoàn thành được gọi. Nếu một ngoại lệ không bị bắt buộc là được ném bởi phương thức hoàn thành, ngoại lệ là bỏ qua và hoàn tất đối tượng đó chấm dứt.
http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html#finalize%28%29
Tôi đã không thể kích hoạt các phương pháp Finalize theo cách này. Có ai biết nếu nó là garunteed không được gọi là hoặc nếu nó là trong một số trường hợp được gọi là sau khi constructor không khởi tạo đối tượng (thew một ngoại lệ).
Tôi hỏi điều này vì tôi có một đối tượng không được làm sạch hai lần. Tôi đang cố gắng để hiểu nếu nó là an toàn để làm sạch trước khi ném ngoại lệ hoặc nếu tôi phải để lại một dấu hiệu cho finalize()
để có hiệu quả bỏ qua và không phải làm gì.
+1 tôi nghi ngờ nó là một cái gì đó bạn sẽ cần phải kiểm tra như các JVM khác nhau có thể hành xử khác nhau. –
Sử dụng 'finalize' là điều xấu. –
@Peter JLS là khá cụ thể, một đối tượng là finalizable một khi constructor cho [base] Object được hoàn tất thành công. –