Tôi đã đến Java từ C++. Trong thế giới C++, chúng ta chú ý đến sự an toàn ngoại lệ, và lưu ý rằng các mutator có thể cung cấp các đảm bảo khác nhau khi đối mặt với các ngoại lệ do chính mutator tạo ra hoặc một phương thức mà nó đại diện (tối thiểu, mạnh, không ném). Việc thực hiện một phương thức có bảo đảm ngoại lệ mạnh mẽ yêu cầu một số thao tác cơ bản được đảm bảo không bao giờ ném một ngoại lệ. JLS đưa ra các câu lệnh về những phép toán nào có thể ném ra các loại ngoại lệ nào, nhưng lỗi VirtualMachineError
trình bày một vấn đề. Quoth các JLS:Đảm bảo không đảm bảo VirtualMachineError
một lỗi hoặc nguồn lực hạn chế nội bộ ngăn ngừa sự ảo máy Java từ việc thực hiện ngữ nghĩa của các lập trình Java ngôn ngữ; trong trường hợp này, một thể hiện của một lớp con của
VirtualMachineError
bị ném.
JLS không nói thêm về VirtualMachineError
. Một "lỗi nội bộ" có nghĩa là một lỗi trong JVM, vì vậy tôi không quan tâm đến trường hợp đó: khi đối mặt với các lỗi trong JVM, tất cả các phiên cược bị tắt. Nhưng còn trường hợp "giới hạn tài nguyên" thì sao? Có bất kỳ hoạt động nào được đảm bảo không bao giờ thất bại do giới hạn tài nguyên không?
Điều gần nhất với câu trả lời là 'try {...} catch (Throwable t) {}'. Tất nhiên nếu bộ nhớ là kiệt sức bất kỳ tiếp tục sẽ chứng minh là gần như không thể. Bây giờ điều đó không khác trong C++. –
Tôi đang trả lời câu hỏi của riêng mình. Câu hỏi thường gặp thậm chí còn khuyến khích điều này. – Raedwald